1

プラグインは、外部に依存する dll ファイルで関数を呼び出す必要があります。チュートリアルに従い、次のことを行いましたが、まだ成功していません。

  • プロジェクト ルートに sample.dll ファイルを貼り付けました。

  • 次の構成を projectDef.cmake (projects\plugintest\Win\projectDef.cmake) に追加しました。

    set (LIBRARY_PATH "${CMAKE_CURRENT_SOURCE_DIR}/sample.dll")
    target_link_libraries(${PROJECT_NAME} debug "${LIBRARY_PATH}/debug/sample.dll")
    target_link_libraries(${PROJECT_NAME} optimized "${SANDSTONE_DIR}/release/sample.dll")
    
  • 「firebreath\prep2010.cmd projects build」を使用してソリューション ファイルを生成しました。

    • 生成された firebreath ソリューションのプロジェクト プロパティ -> 構成プロパティ -> リンカー -> 入力 -> 追加の依存関係には、適切な dll の絶対パスがあります。
  • PluginTestAPI.cpp に以下を追加しました。

    include "sample.h"
    

ビルド エラー:

インクルード ファイル "sample.h" を開けません: そのようなファイルまたはディレクトリはありません。

dll ファイルは、ヘッダー ファイルと lib ファイルのパッケージです。JNA を使用して dll を正常に呼び出すことができます。

私は Java 開発者ですが、C++ プログラミングの経験はあまりありません。私は根本的な何かが欠けていると信じています。

ありがとう!

4

1 に答える 1

3

ここで見逃していることを理解する必要がある主な点は、実際には DLL にリンクしていないということです。代わりに、DLL に付属する .lib ファイルにリンクし、バックグラウンドで DLL のロードを行います。依存する dll をビルドする場所には、.lib ファイルもあることがわかります。それを target_link_libraries のリンク ターゲットとして指定します。

次に、インクルード ファイル「sample.h」を開く場合は、cmake include_directoriesコマンドを使用して、sample.h へのパスをインクルード ディレクトリに追加する必要があります。

タイプミスだと思いますが、sample.dll も 2 回指定しています。LIBRARY_PATH で 1 回、次に target_link_libraries 呼び出しで 1 回。${CMAKE_CURRENT_SOURCE_DIR}/sample.dll/debug/sample.dll にリンクしようとするため、これは機能しません。

他のすべてが失敗した場合は、Visual Studio でプロジェクト プロパティを開き (これを使用しているため)、そこにあるライブラリとインクルード ディレクトリを確認します。これは、cmake が実際に何をしているかを理解するのに役立つことがよくあります。

それが役立つことを願っています!

于 2011-07-03T06:39:40.670 に答える