LoadLibrary()を使用する必要があることを理解しています。しかし、サードパーティのDLLファイルを使用するには、他にどのような手順を実行する必要がありますか?
私は単にC++に飛び込みましたが、これは(Javaプログラマーとして)入手できない唯一の部分です。 Qt Libraryとtesseract-ocrを使用する方法を検討していますが、このプロセスは私には意味がなく、グーグルにとって非常に困難です。
使用している関数をコンパイラーに伝えるにはどうすればよいですか?サードパーティベンダーからのインクルードファイルが必要ですか?
みんなが言うように、LoadLibraryはそれを行うのに難しい方法であり、ほとんど必要ありません。
DLLには、リンク用の.libファイルと、ソースに#includeする1つ以上のヘッダーファイルが付属している必要があります。ヘッダーファイルは、DLLから使用できるクラスと関数プロトタイプを定義します。 LoadLibraryを使用する場合でも、これが必要になります。
ライブラリとリンクするには、リンカー/入力/追加の依存関係の下のプロジェクト構成に.libファイルを追加する必要がある場合があります。
サードパーティのDLLをVS 2008 C++プロジェクトに組み込むために、次のことを行いました(2010、2012などに変換できるはずです)...
ヘッダーファイルを他のヘッダーファイルと共にソリューションに配置し、DLLの関数を呼び出すようにコードを変更しました(それ以外の場合、なぜこれを行うのですか?) :^)次に、ビルドを変更してLIBコードをEXEにリンクし、DLLを所定の場所にコピーし、「クリーン」を実行したときにクリーンアップします。これらの変更について以下に説明します。
2つのサードパーティDLL、A.DLLとB.DLLがあり、それぞれ(A.LIBとB.LIB)とヘッダーファイル(A.HとB.H)のスタブLIBファイルがあるとします。
(使用するソースビルドターゲット(デバッグ、リリース)ごとに、次の一連の変更を行う必要があります。)
EXEをLIBファイルに依存させる
A.LIB B.LIB
で区切って、一度に1つの.LIBファイルをリストします。$(SolutionDir)fodder
がある場合は、$(SolutionDir)fodder;$(SolutionDir)lib
に変更して「lib」を追加します。DLLを強制的に出力ディレクトリにコピーさせます
XCOPY "$(SolutionDir)"\lib\*.DLL "$(TargetDir)" /D /K /Y
Copy DLLs to Target Directory
No
である必要があります。 OK
をクリックします。VSに出力フォルダーをクリーンアップするときにDLLをクリーンアップするように指示します。
*.dll
を追加し、OK
をクリックします。これらは、WindowsでDLLファイルを使用する2つの方法です。
ヘッダーファイルが関連付けられたスタブライブラリ(.lib)があります。実行可能ファイルをlibファイルにリンクすると、プログラムの起動時にDLLファイルが自動的にロードされます。
DLLを手動でロードします。これは、一般的なインターフェイスを実装するDLLファイルが多数あるプラグインシステムを開発している場合に通常行うことです。詳細については、 LoadLibrary および GetProcAddress のドキュメントをご覧ください。
Qtの場合、プロジェクトに含めてリンクできるヘッダーと静的ライブラリがあると思います。
動的リンクでQtを使用するには、「デバッグ」設定でlib
ファイル(通常はqtmaind.lib
、QtCored4.lib
およびQtGuid4.lib
)を指定する必要がありますProperties » Linker » Input » Additional Dependencies
。
また、ライブラリが存在するパスを指定、つまりProperties » Linker » General » Additional Library Directories
。
また、対応する.dll
sを実行時にアクセスできるようにする必要があります。これは、.exe
と同じフォルダー、またはパス上のフォルダーに保存する必要があります。
バインドを遅延させ、実行時にインポートされた関数のみを解決する場合にのみ、LoadLibraryを使用する必要があります。サードパーティのdllを使用する最も簡単な方法は、.libにリンクすることです。
編集への返信:
はい、サードパーティのAPIは、必要なタイプを宣言する実装ファイルとヘッダーファイルを含むdllやlibで構成する必要があります。どの方法を使用する場合でも、タイプ定義を知る必要があります。LoadLibraryの場合は、関数ポインターを定義する必要があるため、代わりに独自のヘッダーファイルを簡単に作成できます。基本的に、遅延バインディングが必要な場合にのみLoadLibraryを使用する必要があります。これの1つの正当な理由は、dllがターゲットPCで使用可能かどうかわからない場合です。
使用できるようにサポートされている場合、サードパーティのライブラリには* .libファイルと* .dllファイルが必要です。プロジェクトの「リンカー」オプションの入力ファイルのリストに* .libを追加するだけです。
この* .libファイルは、必ずしも「コード」を含む「静的」ライブラリではありません。代わりに、*。libは、実行可能ファイルをDLLにリンクする単なるファイルにすることができます。