2009-08-24 10 views
0

私は静的ライブラリから関数を公開する単純なC DLLを持っています。 DLLはエラーなしでコンパイルされ、DUMPBINを実行してエクスポートを確認できます。しかし、私はC#でDllImportでそれをロードしようとすると、それはこの意見:なぜcl.exeは有効なWindowsモジュールを生成していませんか?

System.DllNotFoundException: Unable to load DLL 'ei.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E).

それは確かに、正しいディレクトリにあります。だから私は、他のものを含める必要がある場合に備えて、Dependency Walkerを試してみることをお勧めします。残念ながら、私はDWで私のDLLを開こうとすると、私はこの取得:

Error: At least one file was not a 32-bit or 64-bit Windows module.

をここに私のclコマンドです:

set ERL_INTERFACE_DIR=C:\Progra~1\erl5.7.2\lib\erl_interface-3.6.2\ 
call vcvars32.bat 
cl /I%ERL_INTERFACE_DIR%include /LD ei.c ei.lib Ws2_32.lib /link /LIBPATH:%ERL_INTERFACE_DIR%lib 

これを引き起こしている可能性がありますか?

+0

依存関係ウォーカーの出力(モジュールリスト)をよりよく表示します。 – EFraim

+0

EI.DLL < - これだけです。それの横に赤い円があります。 –

答えて

0

コンパイラが発行するLIBファイルと同じ名前のLIBファイルとリンクしていたため、自身とリンクしていました。ソースファイルの名前をErlInterface.cに変更しました。私は、リンカがこのようなことが起こったときに警告や何かを投げてしまうと思うでしょうが、そうではありません。

とにかく、Dependency WalkerでDLLを開くことができますが、まだDllImportで使用することはできません。それはもう一つの質問です。

関連する問題