0

サード パーティの dll (つまり、ソース コードがない) をアプリケーションにロードしようとしています。Windows XP 32 ビット システムでは正常にロードされますが、Windows 7 システムでは、GetLastError() からのエラー #998 を引用してロードに失敗します。

dll エクスポート ビューアーを使用して、インポートおよびエクスポートされた dll のシンボルを表示したところ、インポート テーブルにリストされている 3 つを除くすべての dll が、このサード パーティ ベンダーからのものであることがわかりました。そうではなかったものは次のとおりです
。kernel32.dll
mingwm10.dll
msvcrt.dll

インポートを行うために使用しているコードは次のとおりです。

SetDllDirectory(L"c:\\dlls");
HMODULE tempDLL = LoadLibrary(L"mydll.dll");
DWORD err = GetLastError();

これをデバッグする方法についてのヒントを教えてください。

編集:答えてくれたみんなに感謝します。これが私がこれまでに発見したことです:
a)アプリケーションツールキットパッケージはそれほど有用であることが証明されていません(以下を参照)
b)同僚Aは、勝利時にdllをロードできます7 マシンと同僚 B はできないので、散発的なものです
c) 管理者として実行しても何も変わりませんでした

4

2 に答える 2

5

Microsoftアプリケーション互換性ツールキット(無料のツールセット)を使用して、Windows 7で失敗する理由を調べてみてください。これが役立つことを願っています。これは、互換性の問題のようです。

于 2011-05-18T19:59:15.080 に答える
1

データ実行防止(DEP) を無効にして試しましたか?

これは通常、Vista 以降ではデフォルトで有効になっていますが、XP では無効になっています。DLL にデータの実行を引き起こすバグがある場合、これは LoadLibrary 呼び出し中に表示される可能性があります。

于 2011-05-18T20:14:23.457 に答える