2016-07-19 13 views
0

.Net CF 3.5アプリケーションから、私のWindows CE 7デバイスの\ Windowsディレクトリにある 'i2csdk.dll'を読み込もうとしています。私がPInvokeを実行しようとすると、私は追加情報で 'System.MissingMethodException'を取得します。PInvoke DLL 'i2csdk.dll'が見つかりません。 coredll.dllとceddk.dllの関数のPInvokeはうまく動作します。どちらもi2csdk.dllの隣にある\ Windowsディレクトリにあります。Win CE DLLの WIndowsからのインポートでMissingMethodExceptionがスローされる

ランタイム中にi2csdk.dllが実際に\ Windowsに存在することを確認しました。

i2csdk.dllが正しくコンパイルされていることも知っています。私のアプリケーションと同じディレクトリにi2csdk.dllをコピーすると、呼び出しが成功するからです。それはまた、このDLLが別のDLLに依存していないことを私に伝えます。

何か不足していますか?何らかのDLL登録手順が必要ですか?

+1

この質問に印を付けてくださった方は、理由をご記入ください。フィードバックに感謝します。私はそれを言い直したり、それを明確にするのは気にしない。 – Hawkez

答えて

1

依存関係ウォーカーを使用して、そのDLLからどのメソッドをエクスポートするかを知ることができます。また、自分で構築する場合は、.defファイルをチェックできます。 DLLがC++で実装されていて、dllexport属性を使用する場合、実際の関数名は "mangled"され、同じベース関数のオーバーロードを区別するために使用されます。extern "C "ブロックし、間違ったエクスポートを避ける代わりにdefファイルを使うことを強く勧めます。 DLLが\ Windowsフォルダにある場合、これは通常、OSイメージの一部であることを意味します。これは、カーネルモードモジュール(bibファイルのKフラグを使用)として組み込まれていれば、ユーザーモード応用。

+0

明瞭にしていただきありがとうございます。 DLLはシステムファイルで、bibファイルのtypeセクションにKでマークされ、カーネルスペースになります。それが問題でした。 [他にもbibファイルの詳細が表示されています。](https://msdn.microsoft.com/en-us/library/ee479063.aspx) – Hawkez

関連する問題