2011-01-09 10 views
6

私のWebサイトプロジェクトでDLLファイルをインポートしたい。私はC:\ DLLDirフォルダに "my.dll"というファイルを持っており、コードを使用しています。Asp.Net C#DllImportの問題

[DllImport("C:\\DLLDir\\my.dll", EntryPoint = "Out32")] 

これは問題ありません。しかし、私は相対パス(Webサイトルートパス)を使用したい。私は「ビン」またはルートフォルダに「my.dll」を入れしようとしていると私は、コードを使用しています:

[DllImport("my.dll", EntryPoint = "Out32")] 

が、私はエラーを取得しています:DLL「my.dll」をロードできません。 : 指定されたモジュールが見つかりませんでした。 (HRESULTからの例外:0x8007007E)

アイデアはありますか?

+1

私はそれがdllへの絶対パスを望むと思う。 Server.MapPathはあなたのためのトリックを行う必要があります –

+0

Server.MapPathはあなたのWebディレクトリの場所に相対的なパスを提供します。だから絶対パスがあれば、それは何の違いもありません。 –

+1

しかし、Server.MapPathはOPにDLLへの相対パスを使用させますが、DLLImportへの絶対パスを渡します。 –

答えて

3

私はSO(それはあなたのケースに関連していますので)最初の質問あなたは次のことをチェックアウトするかもしれないと思う。他の人のよう

DllImport failed to locate DLL even though it is in the PATH

示唆している、ことを確認するPATH環境変数をチェックC:\DLLDir\があります。環境変数hereの設定方法の詳細については、こちらをご覧ください。

これをチェックアウトすると(依存関係に問題があるようです)MSDN forum postもあります。

インポートするCOM DLLの場合は、ターゲットマシンに最初に登録する必要があります(これが必要かどうかわかりませんが)。 Read more here

2

my.dllをロードするBinフォルダにコピーしなかったかどうか。 プロセスエクスプローラ(http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)を使用すると、このファイルをどこからロードしようとしているかが表示されます。

EDIT:管理対象外のDLLであることを思い出させるためのvolpavのおかげで、管理された部分を無視します... ...アセンブリには他のいくつかの依存関係があります。 このような失敗の詳細を調べるhttp://blogs.msdn.com/b/suzcook/archive/2003/05/29/57120.aspxをチェックしてください(他のリンクについては、 "assembly load fussion log"を検索してください)。

+2

私はそれが管理されていないDLLなので、Fusionとは何の関係もないと信じています。 – volpav

0

私はDLLがあなたのパス上にある必要があると信じています(絶対でない場合)。そしてあなたが驚いているのは、特にあなたが "。"を付け加えない限り、CWDはあなたの道にないということです。 PATH変数に追加します。

2

Properties/Buildタブに移動し、プラットフォームターゲットをx86に設定します。