按照標題,我試圖用C構建一個DLL,並將它從一個C++項目中鏈接起來。我在互聯網上閱讀並遵循不同的教程,但每次都有一些缺失,我不明白是什麼。在C中創建一個DLL,並從一個C++項目中鏈接它
下面是我做什麼,一步一步:
我創建了一個新的Win32項目,命名爲testlib
,然後,從該向導,我選擇了「DLL」和「空項目」。
添加的報頭:
//testlib.h
#include <stdio.h>
__declspec(dllexport) void hello();
添加源;因爲我想這是一個C源我讀,我應該simplly重命名.C .cpp文件,所以
//testlib.c
#include "testlib.h"
void hello() {
printf("DLL hello() called\n");
}
構建succeded。
現在我想在另一個項目中使用我有用的dll。
然後:新項目(testlibUse
)。這次我選擇了「空項目」。
無需添加一個標題,就創建了一個CPP源
//main.cpp
#include <testlib.h>
int main() {
hello();
}
然後:
我添加的路徑,其中在屬性 -
testlib.dll
> VC++ directories->可執行文件目錄的文件夾我在屬性 - > 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未找到」的錯誤。
我也試圖改變「釋放」這兩個項目的(改變在需要的路徑)的配置,但什麼都沒有改變。
對不起,很長的文章,但我認爲有必要正確地寫下我做了什麼。
有什麼建議嗎?
此外,如果我想在Qt項目中使用我的dll,是否需要更改任何配置參數?
構建成功,但我在運行時得到「dll not found」錯誤...不足以將屬性 - > VC++目錄中的路徑添加到dll - >可執行目錄中? – Saphrosit
@Saphrosit:不,據我所知,這不會影響應用程序的運行。閱讀該屬性頁面上的描述;它在建立項目時影響二進制文件的發現。您需要在運行時找到DLL(例如,通過PATH環境變量)。 –