2009-05-08 27 views
5

私はMicrosoft Visual C++でCモジュールとして書かれたJD Edwardsビジネス関数を持っています。私はLoadLibraryを使用してサードパーティのDLLにアクセスしています。スタンドアロンのテストプログラムでは、コードは正常に動作します。 JDE内から実行すると、LoadLibraryはNULLを返し、GetLastErrorは126を返します。つまり、MSDNによればThe specified module could not be foundを意味します。私はDLLへの完全なパスを入れようとしました、そして、私はパスの\文字を倍増することを思い出しました。変わりはない。LoadLibraryでDLLをロードできないことがありますか?

私はDLLがロードされないようにする依存関係がないことを確認しました。 DUMPBIN/DEPENDENTSは以下を返します:

WSOCK32.dll 
USER32.dll 
GDI32.dll 
WINSPOOL.DRV 
ADVAPI32.dll 
KERNEL32.dll 

これらは標準的なWindows DLLと似ていますので、私は迷っています。

答えて

5

依存関係がありませんか? Dependency Walkerで、参照されているすべてのライブラリが見つかりましたか?

+0

私がそれを必要として以来、非常に長い時間がかかりました。私はDependency Walkerを完全に忘れました。それは、私が理解している遅延dwmapi.dll DLLがロードされていないが、Vistaだけであると言います。私はそれが問題だとは思わないが、ポインタのおかげです。 –

+0

%windir%\ system32のようなあなたのパス上にあるフォルダにdllを移動するのはどうですか? –

0

ProcMonが実行されている間にテストを試み、ファイル監視が有効な間にエラーが表示されるかどうかを確認することがあります。

3

LoadLibrary呼び出し中にデバッガを接続すると、デバッグ出力にエラー情報が表示されることがあります。ここでの他の提案に加えて、マニフェストにエラーがある場合、この問題が発生します。

私は確かにあなたの依存関係の問題です。 ProcMonのことを試してみて、それが問題を解決するかどうかをVistaで調べてみてください。テスト用のVPCイメージhereを入手できます。

+0

私は今、DLLの問題を抱えています。この回答が役に立ちました。エラー126が発生し、デバッガでDLLのシンボルがロードされ、すぐにアンロードされたことがわかりました。 DLLパスの問題ではなく、私が把握していない依存関係の問題があると思われます。 –

1

私は同じ悪夢に一度行きました。何かを診断することは不可能でした、私はちょうどdllの検索リストの注文経路をリセットすることを発見しました(ここのキーワードはおそらく 'リスト'であり、 '注文'ではないでしょう)。

SetDllDirectory(NULL);

説明は、途中のサードパーティのDLLが、元の状態を復元せずに、おそらくそれを乱していたという説明です。これは、なぜあなたのテストアプリケーションだけが動作していたのか説明することができます。

+0

私はSetDllDirectoryについて、ポインタのおかげで分からなかった。この場合、ファイル名にDLLへの完全なパスがあるので、それは冗長であったはずです。 –

+0

私の特別なケースでは、DLL自体が他のDLLに依存していたため、dllへのフルパスでも作業していませんでした。 – Jem

0

追加で、Dependency walkerはprofileオプションを使用して実行できます。 この場合、exeは依存関係ウォーカーにロードする必要があります。メニューを返信する "プロフィール"を使用できます。

アプリケーションが起動され、dllツリーがいっぱいになります。また、 遅延読み込みDLLが見つからないなどの場合にも表示されます。

0

依存関係を確認して回答が見つからない場合は、アーキテクチャの可能性のある問題に集中することをお勧めします。

あなたはスタンドアロンテスト環境を使用していると述べましたが、通常の環境で試してみるとうまくいきません。ビジネス機能をサーバーで実行するように設定していますか?

JDEで最後に作業して以来、ずっとずっと続いています。私はある種のシンクロナイゼーションでいくつかのUBEを呼び出すためにC言語でBSFNを書いたことを覚えています。ローカルマシンで正常に動作し、サーバでテストしていても動作しませんでした。私はパスを提供していたにもかかわらず、サーバーがDLLを見つけることができず、必要ないくつかの設定について何かがありました。また、私の場合には重要な違いがありました。私のマシンでは、BSFNはUBEの完了を待って、サーバー上で状態を捕捉します。それはサーバー上ではなく、オブジェクトの設定。

役に立つ情報が見つからない場合は、www.jdelist.comでヘルプを求めてください。

関連する問題