5

Microsoft Visual C++ で C モジュールとして記述された JD Edwards ビジネス関数があります。LoadLibrary を使用してサード パーティの DLL にアクセスしています。スタンドアロンのテスト プログラムでは、コードは問題なく実行されます。JDE 内から実行すると、LoadLibrary は NULL を返し、GetLastError は 126 を返します。これはThe specified module could not be found、MSDN によると意味します。DLL へのフル パスを入力しようとしましたが、パス内の \ 文字を 2 倍にすることを覚えていました。変わりはない。

DLL の読み込みを妨げる依存関係がないことを確認しました。DUMPBIN /DEPENDENTS は次を返します。

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

これらは標準の Windows DLL のように見えるので、途方に暮れています。

4

6 に答える 6

5

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

于 2009-05-08T22:51:16.193 に答える
3

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

ただし、依存関係の問題であると確信しています。ProcMonを試してみてください。また、Vistaで実行して、問題が解決するかどうかを確認してください。ここでテストVPCイメージを取得できます。

于 2009-05-12T15:36:57.333 に答える
2

私は同じ悪夢に一度行きました。何も診断することは不可能でした.dll検索リストの順序パスをリセットすると(ここでのキーワードはおそらく「順序」ではなく「リスト」です)、問題が解決したことがわかりました。

SetDllDirectory(NULL);

説明は、途中でサードパーティの DLL が元の状態に復元せずに、おそらくそれをいじっていたということです。これにより、テスト アプリケーションだけが機能していた理由を説明できます。

于 2009-06-05T15:19:14.043 に答える
0

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

スタンドアロンのテスト環境を使用しているとのことですが、通常の環境で試してみるとうまくいきません。ビジネス機能はサーバーで実行するようにセットアップされていますか?

最後に JDE を使用してからかなりの時間が経ちました。あるとき、一種の同期で複数の UBE を呼び出すために C で BSFN を書き、ローカル マシンでは問題なく動作しましたが、サーバーでテストしているときには動作しませんでした。サーバーが DLL を見つけることができず (パスを提供していたにもかかわらず)、必要な設定がいくつかありました。また、私の場合は重要な違いがありました。私のマシンでは、BSFN は UBE の完了を待ってステータスをキャプチャしますが、サーバーではそうではなく、オブジェクトの設定にも関係していました。 .

繰り返しになりますが、有用なものが見つからない場合は、www.jdelist.com でヘルプを求めてみてください。

于 2009-09-22T19:47:48.313 に答える
0

ProcMonの実行中にテストを試み、ファイル監視が有効になっている間にエラーが表示されるかどうかを確認してください。

于 2009-05-12T15:32:48.870 に答える
0

さらに、プロファイル オプションを使用してDependency walkerを実行できます。この場合、exe を依存関係ウォーカーにロードする必要があります。その後、メニュー「プロファイル」を使用できます。

次に、アプリケーションが開始され、dll ツリーがいっぱいになります。これは、dll のロードの遅延が欠落している場合や、その他のものも表示されます。

于 2009-06-08T11:43:03.417 に答える