none
DLLが読み込めません RRS feed

  • 質問

  • 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内の関数を呼び出して上記のエラーが出ました。

     

    2007年10月2日 2:32

すべての返信

  • 外池と申します。

     

    文脈からして、そのDLLファイルは、アン・マネージドなかつActiveXと無関係な(この場合「参照の追加」はできないはず。このことをもってDLLファイルがおかしい、ということにはならないので安心?してください。)、API呼び出しで使うものですよね?

     

    私なら・・・、実行ファイル(exeファイル)が出来上がるフォルダーに格納しておきますが。ソリューション・エクスプローラーに表示されるかどうかよりも、「exeファイルから見える場所」に置いておくことが大事だと思います。Debug版と、Release版でことなったフォルダにexeファイルが吐き出されますから、どちらにも、同じDLLファイルをコピーしておけばよいかと思います。

     

     

     

     

    2007年10月2日 2:46
  •  hibari さんからの引用

    コンパイルは通ったのですが、アプリケーションを実行させ、DLLを呼び出すメソッドのところでDLLが見つからないというエラーが出ます。また「参照の追加」でdllを指定しようとすると「これは正式なDLLではない」といった旨のエラーメッセージが出力されます。どうしたらいいのでしょうか。

     

    ソリューションエクスプローラー内の DLL を選択して、プロパティウィンドウにある [ビルド アクション] を [コンテンツ] にし、[出力ディレクトリにコピー] をコピーする設定にすればよいかと思います。

     

     hibari さんからの引用

     ところでVisual studio 2005ではプロジェクト名のフォルダ内にもう一つ同名(プロジェクト名)のフォルダがあります。通常のソースは一番内側のフォルダ内に入っていますが、DLLは内側と外側のどちらにコピーすべきでしょうか?

     
    外側は、ソリューションのフォルダで、内側はプロジェクトのフォルダだったりしませんか?
    ソリューションを開いていない状態でプロジェクトを新規作成すると、Visual Studio がプロジェクトと同じ名前のソリューションを作成するので、二重になっているように見えるのではないかと思います。
     
    2007年10月2日 16:03
  • 外池です。

     K.Takaoka さんからの引用

    ソリューションエクスプローラー内の DLL を選択して、プロパティウィンドウにある [ビルド アクション] を [コンテンツ] にし、[出力ディレクトリにコピー] をコピーする設定にすればよいかと思います。
    なるほど・・・、そういうときに使うわけですね。
     
    ビルド・アクションの使い方の典型例を紹介した資料があれば便利なんですが。
    2007年10月3日 0:22