Theo tiêu đề, tôi đang cố gắng xây dựng một DLL bằng cách sử dụng C và liên kết nó từ một dự án C++. Tôi đọc và làm theo các hướng dẫn khác nhau trên internet nhưng mọi thứ đều thiếu một cái gì đó và tôi không hiểu điều gì.Tạo một DLL trong C và liên kết nó từ một dự án C++
Đây là những gì tôi đã làm, từng bước:
Tôi tạo ra một dự án Win32 mới, được đặt tên testlib
, sau đó, từ trình hướng dẫn, tôi đã chọn "DLL" và "dự án rỗng".
Added một tiêu đề:
//testlib.h
#include <stdio.h>
__declspec(dllexport) void hello();
Added một nguồn; vì tôi muốn nó là nguồn C tôi đọc nên đơn giản đổi tên tệp .cpp trong .c, do đó,
//testlib.c
#include "testlib.h"
void hello() {
printf("DLL hello() called\n");
}
Xây dựng thành công.
Bây giờ tôi muốn sử dụng dll hữu ích của mình trong một dự án khác.
Sau đó: dự án mới (testlibUse
). Lần này tôi chọn "Empty project".
Không cần phải thêm một tiêu đề, vừa tạo ra một nguồn cpp
//main.cpp
#include <testlib.h>
int main() {
hello();
}
Sau đó:
tôi đã thêm đường dẫn đến thư mục mà là
testlib.dll
trong Properties-> VC++ directories-> thư mục ExecutableTôi đã thêm đường dẫn vào thư mục ở đó là
testlib.h
trong Thuộc tính-> VC++ folders-> Bao gồm thư mụctôi đã thêm đường dẫn đến
testlib.lib
(bao gồm phần mở rộng) trong Properties-> Linker-> Input-> phụ thuộc bổ sung
Tôi cố gắng để xây dựng nhưng tôi có một mối liên kết lỗi:
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
Nếu tôi quay lại testlib
, đổi tên lại testlib.c
trong testlib.cpp
và xây dựng lại dll, sau đó tôi có thể xây dựng testlibUse
nhưng tôi nhận được lỗi "không tìm thấy dll" khi chạy.
Tôi cũng đã thử thay đổi cấu hình của cả hai dự án trong "Bản phát hành" (thay đổi đường dẫn khi cần) nhưng không có gì thay đổi.
Xin lỗi vì bài đăng dài nhưng tôi nghĩ cần ghi lại chính xác những gì tôi đã làm.
Mọi đề xuất?
Ngoài ra, có bất kỳ thông số cấu hình nào tôi cần thay đổi không nếu tôi muốn sử dụng dll của mình trong dự án Qt?
Xây dựng thành công nhưng tôi gặp lỗi "không tìm thấy dll" khi chạy ... Không đủ để thêm đường dẫn vào dll trong Properties-> VC++ folders-> Executable directories? – Saphrosit
@Saphrosit: Không, theo hiểu biết tốt nhất của tôi, điều đó sẽ không ảnh hưởng đến hoạt động của ứng dụng. Đọc mô tả trên trang thuộc tính đó; nó ảnh hưởng đến việc tìm kiếm các tệp nhị phân khi xây dựng dự án. Bạn cần tìm thấy DLL (ví dụ: thông qua biến môi trường PATH) khi chạy. –