3

Delphi 2010 で次の行コードを使用すると、「アクセス違反」エラーが発生しますが、同じコードが VC++ で正常に動作します。

Delphi 2010 コードは

var
  hMyInf : HINF;
begin
hMyInf := SetupOpenInfFile('.\\DIGIMHID.INF','Mouse', INF_STYLE_WIN4,Nil);

VC++ コードは

hMyInf = SetupOpenInfFile(".\\DigimHID.inf", "Mouse", INF_STYLE_WIN4, NULL);

この問題を解決するために私を助けてください。皆さんありがとう。

4

2 に答える 2

4

LoadSetupAPIメソッドを使用する前に呼び出すSetupAPI.pas

Edit、背景を提供するために:Davidが彼の回答で、そして私が私のコメントで同時に書いたように、エラーはおそらく初期化されていないメソッドポインターを呼び出すことによって引き起こされます。私にとって最初のヒントは、エラー メッセージである Access Violation でした。Access Violation に相当するものが Windows 自体から来た場合、Runtime Error 216. コードは非常に単純で、定数とメソッド呼び出しのみを使用します。定数は AV を生成できないため、エラーはメソッド自体またはメソッドの呼び出しから発生する必要がありました。

提供された Delphi 宣言は「関数型」を示していたので、SetupOpenInfFile実際にはメソッドではなくメソッド ポインタであると思われimportます。これらのポインターは、何らかの方法で初期化する必要があります。検索SetupAPI.pas(私は JEDI ライブラリを使用していないため、リンクを提供してくれた Google に感謝します) から割り当てられていることがすぐにわかりましたLoadSetupAPI。私の最初の考え:セクションLoadSetupAPIから呼び出されていませんか?initializationそうではないので、コードから呼び出す必要があります。問題が解決しました。

于 2011-02-13T08:44:14.933 に答える
2

Delphi バージョンではファイル名が間違っています。Delphi では \ をエスケープしません。しかし、それはアクセス違反にはなりません。

私の推測では、GetProcAddress 呼び出しが失敗しています。しかし、それは推測です。より多くのコードと完全なエラー メッセージを確認したいと思います。

編集

私たちは正しい軌道に乗っていたようです。Cosmin の回答が問題を解決します。別の方法は、 の条件の定義を削除して、暗黙的なリンクに切り替えることSETUPAPI_LINKONREQUESTですSetupApi.pas

于 2011-02-13T08:22:49.127 に答える