動的ライブラリをロードするLoadLibrary関数は、考えられる原因と解決策を失敗しました:
(1)DLLの動的ライブラリが間違ったパスをファイル。このシーンは、次のような状況に細分化されています。
1.1 ファイルのパスは確かに間違っています。たとえば:元はフォルダの下に動的ライブラリA.DLLをロードするが、慎重な調査とA.DLL動的ライブラリは、今はもうBフォルダにコピーされた理由の後。
その出会いは、このような愚かな間違いならば、私はあなたが反時計回りに円を、外出先指定スクワット小指との隅に誰を見つけることをお勧めします。。。
値の誤差によって渡される引数1.2。例:文字列変換が裏目に出るので、タイプ引数LPCWTRは、多くの場合、引数につながります。
オンラインレッスンは、インスタンスを学びました。成功した次の文によって呼び出されるいくつかの困難の後、プログラマ
hDll = LoadLibraryの(TEXT( "user32.dllの"));
一部のGoogleの後Baiduのは、文字形式は責任があることを発見しました。
ここでは代わりにLoadLibraryA LoadLibraryW実用化のLoadLibraryのは、それが代わりに狭い文字列の必要なUNICODE文字列(列幅)、です。次のように:
UNICODEの#ifdef
#defineのLoadLibrary LoadLibraryW
#else
#defineのLoadLibrary LoadLibraryA
#endifの//!UNICODE
C / C ++コード「」狭いバイト文字列の文字列として定義されている直接使用において、窓やTEXTマクロファイルヘッダは、マクロを自動的にUNICODE文字列の種類を選択するために定義されているかどうかに応じて設けてもよいです。
そのため、使用自動的に正しい文字セットを選択するために、TEXTマクロを、DLLの呼び出しが成功しました。
(2)DLLの初期化の失敗を、グローバル変数またはDllMain関数がfalseを返すあります。この状況は、特定のビジネス分析除外や位置に応じてコードが必要です。
(3)64ビットプロセスは、32ビットのダイナミックライブラリDLLの問題を呼び出します。
次のようにこの問題については、Microsoftの公式サイトが記載されています:
64ビットのWindowsシステム、プロセスは、64ビット、32ビットDLL、32ビットプロセスは64ビットDLLをロードできません同じようにロードすることはできません。
あなたが本当にソースコードを持っていない場合、それは「恥ずかしい」とは、あなたが上で情報を見ることができます実行したいと思います「問題と32 DLLソリューションを考える/プログラム64は、64ビットプロセスの呼び出しをもたらす」こと
(4)その他の理由
4.1 LoadLibraryEx機能付きLoadLibrary関数は、同じDLLのローディング機構ではない後者はありませんが、自動的に、場合前者遭遇他の依存DLLとDLLローディングDLLロードされます。
そして、パスの問題を除く、(最良の完全なパスを)成功していない自分自身のdllのオンライン例の負荷がありますが、DLLを他のDLLに依存するかどうかを検討する必要があります。
オリジナル:https://www.cnblogs.com/Braveliu/p/9342633.html