1

PINVOKE を使用して、私も書いている dll を呼び出す WPF アプリを作成しています。dll 内のエクスポートされた関数の 1 つで、SetupDiGetClassDevs が呼び出されます。この時点で、XP でアプリを実行するとエラーが表示されます。まず、次のようなダイアログ ボックスが表示されます。

「プロシージャ エントリ ポイント RegOpenKeyExW がダイナミック リンク ライブラリ KERNAL32.dll に見つかりませんでした。」

[OK] をクリックすると、未処理の例外ダイアログが表示されます。WPP アプリと dll の両方が Win7 マシン上の VS2010 でビルドされており、アプリは Win7 システムで正常に動作します。この問題は、XP でアプリを実行している場合にのみ発生します。dll で SetupDiGetClassDevs (およびその後の SetUpdi 関数呼び出し) を回避しても、何も問題はありません。PINVOKE メカニズムは正常に動作しているようです。

何がうまくいかないのですか?dll は UNICODE を有効にしてビルドされていないため、参照されている RegOpenKeyExW を見て少し混乱しています。

ありがとうトム

4

1 に答える 1

1

私は、問題があなたの P/invoke コードにあるか、またはおそらくLoadLibrary/GetProcAddressDLL の直接バインドにあると強く疑っています。問題は、のRegOpenKeyEx一部ではありませんkernel32。によってエクスポートされadvapi32ます。インポートしようとしている .lib ファイルがあるとは信じられないので、コードまたはおそらくサードパーティのコードでkernel32P/invoke または a を探す必要があると思います。GetProcAddress

于 2011-10-14T15:38:14.070 に答える