2012-05-10 12 views
0

私のプログラムは、LoadLibraryを使用して多数のDLLを動的にロードします。これらのDLLの一部はロードされません。 lasterrorをトレースするためのコードを追加しました。この報告では "0x43ネットワーク名が見つかりませんでした。"lasterror 0x43でLoadLibraryが失敗するネットワーク名が見つかりません

問題のマシンはWindows 7 Enterprise x64を実行していますが、DLLは32ビットDLLですが、これは問題ではないはずです。実際これは自分の開発環境です。

また、パス名を含むDLLの名前を短いファイル名に変換して、LoadLibraryを呼び出す際に同じエラーが発生しました。

アイデア?

// * eggbox

+1

LoadLibraryには[複雑な検索パスアルゴリズム](http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586%28v=vs.85%29.aspx)があります。無効なネットワークパスが検索パス上に終了しましたか? – Benj

+0

LoadLibraryに提供されるファイル名は完全修飾名です。 C:\ Program Files(x86)\ MyApp \ DLLs \ AssetModule.dll、またはショートネームバージョン。 – eggbox

+0

確かに、それが依存するライブラリはどうですか? – Benj

答えて

2

ダウンロードProcmonそれはあなたのdllの名前のために実行し、フィルタしましょう。これにより、dllが検索された場所と、0x43を返したアクセスパスがすぐに表示されます。

あなたのコードにもpdbsがある場合(C/C++にはマネージコードなし)、呼び出しスタックさえも得られます。

+0

ヒントをありがとう、私は私のシステムでそれを試してみて、私はユーザーシステムとの違いを見ることができるかどうかを確認します。 – eggbox

+0

Procmonは私に、従属DLLを読み込めないことを指摘する情報を与えました。奇妙なことは、依存DLLが読み込みに失敗した直前に読み込まれていたことです。少なくとも私は助けてくれてありがとうございます。 – eggbox

+0

何が起こっているのか知っていることを皆に伝えてください。顧客は、パスステートメントにネットワーク共有を指しているエントリを持っていました。たとえば、\\ machine \ folder \ subfolder **のように、アクセスできない(エラーコード)のように見えます。 **修正**はパスからエントリーを削除することでしたが、シンプルで本当にイライラしました。 – eggbox

0

プロファイルモードでDependency Walkerからプログラムを実行し、問題の原因を正確に伝えることができます。

+0

プロファイルモードでDependency Walkerを試しましたが、x86システムとx64マシンの両方で(システム上の)ロードの終わりまではありませんでした。しかし、いいアイデア。 – eggbox

+0

エラーが発生した場合はどうなりますか? –

+0

デビッド、私は私の開発マシンでこれを試してみましたが、通常は正常に読み込まれ、終わりには達しませんでした。 – eggbox