web-dev-qa-db-ja.com

DllNotFoundException、ただしDLLがあります

そのため、PsyREG.dllと呼ばれるDLLを操作するためのSDKと、DLLからのメソッドを使用するためのc#ソースを提供するハードウェア乱数ジェネレータのSDKを使用しています。

以前は機能していましたが、どういうわけか機能しなくなりました。現時点では問題のデバイスに実際にはアクセスできないので、私の手は少し縛られているので、多くのことを試すことはできません...

しかし、これは奇妙なことです。 DLLは、以前と同じ場所にあります。実際にはFile.Exists( "PsyREG.dll")がtrueを返し、私は再確認しました。これは、提供されたc#ソースがインポートする方法とまったく同じです。 [DllImport( "PsyREG.dll")]。

何か案は?

31
Asmor

おそらく、このdllにはいくつかの依存関係があり、それらが登録されていないか、アプリケーションの同じフォルダーにありません。

39
Cleiton
8
cbuteau

おそらく、dllの特定の製品バージョンが必要かどうかを確認し、製品バージョンが正しく一致していることを確認する必要があります。

1
Joseph

私はこの問題に遭遇し、以下で解決しました:

/ MDの下でコンパイルする場合、msvcr90.dllへの依存関係があります。代わりに/ MTを使用してコードをコンパイルしてください。

Project properties> C/C++> Code Generation> Runtime Library: /MT

1
kjhf

私は自分のDLLの1つに関して同じ例外を扱っていました(Aと呼びましょう)。これが見つからなかったと主張したため、C#はクラッシュしましたDLL(A)(実行可能ファイルと同じフォルダーにありました)。

この問題の原因はAが別の依存関係があることであることが判明しましたDLL(これをBと呼びます)。Bがパスに含まれていませんでしたそのため、Aは必要なときにそれをロードできませんでした。Bには他のDLLがたくさん必要だったので、解決策はBのディレクトリをPATH環境変数。

実際にはAが見つからないのにBが見つからないというエラーでC#がクラッシュするのは興味深いことです...

0
M2X