2

QtSql に QOCI プラグインを使用しようとしていましたが、問題が発生するまで: QOCI プラグインが機能しない理由

ただし、ライブラリの読み込みの問題であることが判明したため(少なくとも私はそう思います)、新しい質問であるため、質問の主題を変更することにしました。

dll ファイル (qsqloci4.dll と呼ばれる) があります。LoadLibrary でロードしようとすると失敗し、GetLastError が ERROR_MOD_NOT_FOUND を返します。LoadLibraryEx でロードしようとすると、3 番目のパラメータが DONT_RESOLVE_DLL_REFERENCES で、正常にロードされます(NULL は返されません)。

だから、私はそれが依存関係の問題だと思った。dll ファイルを依存関係ウォーカーで開いたところ、QtCore4.dll と QtSql4.dll の 2 つのファイルが見つかりませんでした。ただし、これらのファイルはアプリケーションの作業ディレクトリにあり、これらの dll に依存する他の dll ファイル (qsqlpsql4.dll など) は正常にロードされます。

その他の dll (依存関係ウォーカーによって配置される) は次のとおりです。

  • oci.dll : QtCore4.dll および QtSql4.dll と同じフォルダーにあり、アプリがアクセスできることを意味します
  • kernel32.dll : アプリで見つけるのが最も簡単な dll だと思います
  • msvscr80.dll : これを使用する他の dll ファイルは正常にロードできます。

これが私の質問です:依存関係ウォーカーが言うと:「あなたはqtのものを除くすべてのdllを持っています」と私はqt dllを持っていると確信しています.LoadLibraryがERROR_MOD_NOT_FOUNDで失敗する他の理由は何ですか?

4

1 に答える 1

5

明示的なリンクによって解決される依存関係があるため、動的モードで Dependency Walker を実行する必要があります。プロフィールメニューからこれを行うと思います。

于 2011-06-03T16:45:46.600 に答える