5

私は再び別の問題を抱えています。今回は、.qrc(QTリソース)ファイルを含む共有ライブラリである.dllがあります。問題は、ライブラリのリソースの1つにアクセスしようとすると、機能しないことです。私は実装してみました:

Q_INIT_RESOURCE(resourcefilename)

そしてそれはまだ機能していません。(「qInitResources_resourcefilename()」が見つからないということです。)

4

2 に答える 2

4

どうでも。私は解決策を見つけました。qInitResources_name()が見つかりませんでした。そこで、共有ライブラリ内に関数を作成しました

int RmiLib::startResources(){
    extern int qInitResources_rmi();
    return qInitResources_rmi();
}

次に、メインアプリで、その関数を呼び出しました。機能した。

于 2012-08-25T00:44:19.943 に答える
2

.dllがあると言っているので、Windowsを使用していると仮定します。

関数qInitResources_resourcefilenameが見つからないという同じ問題が発生しました。ライブラリに.qrcファイルがある場合、この関数は実際に共有ライブラリに存在します(マップファイルを確認してください)。問題は、この関数がエクスポートされないため、メインアプリのリンク中にリンカーが関数を見つけられないことです。次のように、共有ライブラリのエクスポートテーブルに関数qInitResources_resourcefilenameを追加しました。

共有ライブラリexport.defに新しいファイルを追加します

LIBRARY
EXPORTS
  qInitResources_resourcefilename

共有ライブラリの.proファイルに以下を追加します

QMAKE_LFLAGS += /DEF:\"$${PWD}\\export.def\"
OTHER_FILES += \
    export.def

RmiLib :: startResourcesがエクスポートテーブルに含まれているため、ソリューションはこの問題を回避します。

Windows 7、MSVC 2010、Qt5.2.0を使用しています

于 2014-07-29T12:21:53.053 に答える