- PR -

C#のEXEとC++/CLIのDLLでエラー

1
投稿者投稿内容
いろは
常連さん
会議室デビュー日: 2005/05/11
投稿数: 31
投稿日時: 2008-01-17 13:10
VS2005+XPsp2で開発の検討を行っています。

EXEをC#で、DLLをC++/CLIで作成しRelease版にて実行してみました。
XPではエラーは出ないのですが、Vistaで実行すると実行時にエラーが表示されます。
VistaにはVS2005はインストールされていませんが、VC2005のランタイムはインストールしてあります。

エラーの内容は
Unhandled exception has occurred in your application. If you click Continue. the application will ignore this error and attempt to continue. If you Quit. the application will close immediately.
Could not load file or assembly 'MyLibrary. Version=xxx Culture=neutral, PublicKey Token=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.
とメッセージボックスが出ます。
おそらくプロジェクトの設定だと思うのですが、どのようにしたらエラーが無くなるのか全く分からない状態です。

ちなみにC++/CLIで作成したEXEから同じDLLを用いて実行を行った時はエラーは表示されませんでした。

簡単ですが、以下にソースを掲載します。

--- C# ---
コード:

using MyLibrary;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
// ボタンをクリックするとエラーメッセージが表示される
MyClass myclass = new MyClass();
}
}
}



--- C++/CLI ---
コード:

#pragma once

using namespace System;

namespace MyLibrary {
public ref class Class1
{
public:
Class1()
{
}

};
}


以上、よろしくお願いします。

[ メッセージ編集済み 編集者: いろは 編集日時 2008-01-17 13:34 ]
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2008-01-17 14:18
メッセージからするとWindowsAPIのエラーっぽいですね。
dllの方のコンパイルした時の/clrオプションはどうなっていますか。
http://msdn2.microsoft.com/ja-jp/library/k8d11d4s(VS.80).aspx
もしできるなら/clr:safeにしてみるとか…。

いろは
常連さん
会議室デビュー日: 2005/05/11
投稿数: 31
投稿日時: 2008-01-17 14:59
一郎さん ありがとうございます。

DLLのコンパイルオプションは/clrでコンパイルしています。
/safeに変更もしてみましたが、結果ダメでした。

作成の手順が悪いのでしょうか?
私がやった手順をざっと書いてみます。
1. 新規プロジェクトで[VC++]-[CLR]-[クラスライブラリ]でMyLibraryを作成
2. Class1にコンストラクタだけ定義・実装
3. 新規プロジェクトで[C#]-[Windowsアプリケーション]でEXEプロジェクト作成
4. C#の参照にMyLibraryを追加
5. ボタンクリック時にClass1をnewするよう記述
6. Relase版でビルド
6. ビスタにて実行

どこか設定が抜けていたりしますでしょうか。
引き続きよろしくお願いします。

(MyClassをClass1に修正)

[ メッセージ編集済み 編集者: いろは 編集日時 2008-01-17 15:57 ]
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2008-01-17 15:46
MyClassとClass1は別物なんですか?
Class1はどこからも使われていないクラスということですか?
いろは
常連さん
会議室デビュー日: 2005/05/11
投稿数: 31
投稿日時: 2008-01-17 15:56
引用:

一郎さんの書き込み (2008-01-17 15:46) より:
MyClassとClass1は別物なんですか?



すみません。同じものです。
作成の手順をさらさらっと書いたため、間違えていました。
MyClassはClass1と読み替えて下さい。
(前のコメントのところも修正しておきます)
いろは
常連さん
会議室デビュー日: 2005/05/11
投稿数: 31
投稿日時: 2008-01-17 18:40
その後色々試してみました。
結果分かりました。

テストで使用していたPCがVista64bitsだったのです。
EXEはAnyCPUでビルド、DLLはwin32でビルドしていたため、実行時エラーとなっていました。

お騒がせいたしました。
(一郎さん お付き合いいただきありがとうございました)
1

スキルアップ/キャリアアップ(JOB@IT)