そのため、PsyREG.dllと呼ばれるDLLを操作するためのSDKと、DLLからのメソッドを使用するためのc#ソースを提供するハードウェア乱数ジェネレータのSDKを使用しています。
以前は機能していましたが、どういうわけか機能しなくなりました。現時点では問題のデバイスに実際にはアクセスできないので、私の手は少し縛られているので、多くのことを試すことはできません...
しかし、これは奇妙なことです。 DLLは、以前と同じ場所にあります。実際にはFile.Exists( "PsyREG.dll")がtrueを返し、私は再確認しました。これは、提供されたc#ソースがインポートする方法とまったく同じです。 [DllImport( "PsyREG.dll")]。
何か案は?
おそらく、このdllにはいくつかの依存関係があり、それらが登録されていないか、アプリケーションの同じフォルダーにありません。
おそらく、dllの特定の製品バージョンが必要かどうかを確認し、製品バージョンが正しく一致していることを確認する必要があります。
私はこの問題に遭遇し、以下で解決しました:
/ MDの下でコンパイルする場合、msvcr90.dllへの依存関係があります。代わりに/ MTを使用してコードをコンパイルしてください。
Project properties
> C/C++
> Code Generation
> Runtime Library: /MT
私は自分のDLLの1つに関して同じ例外を扱っていました(A
と呼びましょう)。これが見つからなかったと主張したため、C#はクラッシュしましたDLL(A
)(実行可能ファイルと同じフォルダーにありました)。
この問題の原因はA
が別の依存関係があることであることが判明しましたDLL(これをB
と呼びます)。B
がパスに含まれていませんでしたそのため、A
は必要なときにそれをロードできませんでした。B
には他のDLLがたくさん必要だったので、解決策はB
のディレクトリをPATH
環境変数。
実際にはA
が見つからないのにB
が見つからないというエラーでC#がクラッシュするのは興味深いことです...