タイトルごとに、私はCを使用してDLLを作成し、C++プロジェクトからリンクしようとしています。私はインターネット上のさまざまなチュートリアルを読んで、それに従っていましたが、何かが見当たらず、私は何が分からないのです。CでDLLを作成してC++プロジェクトからリンクする
はここで、私が何をしたかのステップバイステップです:
私はtestlib
という名前の新しいWin32プロジェクトを作成し、その後、ウィザードから、私は「DLL」と「空のプロジェクト」を選択しました。
付加されたヘッダ:
//testlib.h
#include <stdio.h>
__declspec(dllexport) void hello();
追加されたソース。私はそれがCのソースにしたいので、私はそう
//testlib.c
#include "testlib.h"
void hello() {
printf("DLL hello() called\n");
}
ビルドがsucceded、私はsimplly .Cで.cppファイルの名前を変更する必要があります読んで。
今、別のプロジェクトで役に立つDLLを使いたいと思います。
次に、新しいプロジェクト(testlibUse
)。今回私は "Empty project"を選択しました。
ヘッダを追加する必要はありませんが、ちょうどその時のcppソース
//main.cpp
#include <testlib.h>
int main() {
hello();
}
を作成しました:
を私はプロパティ - > VC++ directories->実行可能ファイルのディレクトリにされ
testlib.dll
フォルダへのパスを追加しましたフォルダには、[プロパティ - > VC++ディレクトリ - >インクルードディレクトリ]の
testlib.h
のパスが追加されました。私が構築しようとしたが、私は、リンカのエラーを得たプロパティ - >リンカー - >入力 - >追加の依存関係に
testlib.lib
(付属延長)に
をパスを追加しました:
LINK : C:\path\testlibUse\Debug\testlibUse.exe not found or not built by the last incremental link; performing full link
main.obj : error LNK2019: unresolved external symbol "void __cdecl hello(void)" ([email protected]@YAXXZ) referenced in function _main
C:\path\testlibUse\Debug\testlibUse.exe : fatal error LNK1120: 1 unresolved externals
testlib
に戻った場合、testlib.c
の名前をtestlib.cpp
に変更し、dllを再構築すると、testlibUse
をビルドすることができますが、実行時に「dll not found」エラーが発生します。
"リリース"(必要に応じてパスを変更)で両方のプロジェクトの設定を変更しようとしましたが、何も変更されませんでした。
長いポストに申し訳ありませんが、私が行ったことを正確に書き留める必要があったと思います。
提案がありますか?
さらに、私がQtプロジェクトで自分のdllを使いたい場合に変更する必要のある設定パラメータはありますか?
ビルド成功したが、私は、実行時に「見つからないDLL」エラーが出ますが...プロパティ - > VC++ directories->実行可能ファイルのディレクトリにDLLへのパスを追加するのに十分ではなかったですか? – Saphrosit
@Saphrosit:いいえ、私の知る限り、アプリの実行には影響しません。そのプロパティページの説明を読んでください。プロジェクトを構築している間にバイナリの発見に影響を与えます。実行時にDLLが検出される必要があります(PATH環境変数など)。 –