質問者
DLLが読み込めません

質問
-
C#でアプリケーションソフトを開発しています。
Visual studio 2005で既存のDLL(マイコン業者が作成)をプロジェクトが入っているフォルダにコピーし、「既存項目の追加」でプロジェクトに追加しました。ソリューショエクスプローラでもDLLが表示されています。
コンパイルは通ったのですが、アプリケーションを実行させ、DLLを呼び出すメソッドのところでDLLが見つからないというエラーが出ます。また「参照の追加」でdllを指定しようとすると「これは正式なDLLではない」といった旨のエラーメッセージが出力されます。どうしたらいいのでしょうか。
ところでVisual studio 2005ではプロジェクト名のフォルダ内にもう一つ同名(プロジェクト名)のフォルダがあります。通常のソースは一番内側のフォルダ内に入っていますが、DLLは内側と外側のどちらにコピーすべきでしょうか?
このDLL自体に問題がないと仮定した場合、操作方法で何か問題は考えられるでしょうか?ちなみにDllImportでDll内の関数を呼び出し、必要に応じてIntPtr型の引数は構造体にマーシャリングしました(Marsahl.StructureToPtrやMarshal.PtrToStructureを使用)。String型(構造体に入っている)の変数に値を代入し、IntPtr型にマーシャルした後、それを引数にしてDLL内の関数を呼び出して上記のエラーが出ました。
すべての返信
-
外池と申します。
文脈からして、そのDLLファイルは、アン・マネージドなかつActiveXと無関係な(この場合「参照の追加」はできないはず。このことをもってDLLファイルがおかしい、ということにはならないので安心?してください。)、API呼び出しで使うものですよね?
私なら・・・、実行ファイル(exeファイル)が出来上がるフォルダーに格納しておきますが。ソリューション・エクスプローラーに表示されるかどうかよりも、「exeファイルから見える場所」に置いておくことが大事だと思います。Debug版と、Release版でことなったフォルダにexeファイルが吐き出されますから、どちらにも、同じDLLファイルをコピーしておけばよいかと思います。
-
hibari さんからの引用 コンパイルは通ったのですが、アプリケーションを実行させ、DLLを呼び出すメソッドのところでDLLが見つからないというエラーが出ます。また「参照の追加」でdllを指定しようとすると「これは正式なDLLではない」といった旨のエラーメッセージが出力されます。どうしたらいいのでしょうか。
ソリューションエクスプローラー内の DLL を選択して、プロパティウィンドウにある [ビルド アクション] を [コンテンツ] にし、[出力ディレクトリにコピー] をコピーする設定にすればよいかと思います。
hibari さんからの引用 ところでVisual studio 2005ではプロジェクト名のフォルダ内にもう一つ同名(プロジェクト名)のフォルダがあります。通常のソースは一番内側のフォルダ内に入っていますが、DLLは内側と外側のどちらにコピーすべきでしょうか?
外側は、ソリューションのフォルダで、内側はプロジェクトのフォルダだったりしませんか?ソリューションを開いていない状態でプロジェクトを新規作成すると、Visual Studio がプロジェクトと同じ名前のソリューションを作成するので、二重になっているように見えるのではないかと思います。