cuốn sách gpt4 ai đã làm

c# - DLL biên dịch bên ngoài lạ chưa được giải quyết

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 11:13:28 27 4
mua khóa gpt4 Nike

Tôi đang cố gắng làm theo hướng dẫn trên trang web này: http://support.microsoft.com/kb/q168958

Mã này như sau:

#include 
#include

Kiểm tra không gian tên {

mẫu lớp TestBuffer
{
private:
LOẠI* ​​m_pData;
size_t m_uKích thước;

public:
TestBuffer(size_t uSize): m_pData(NULL), m_uSize(0)
{
m_pData = (TYPE*)malloc(uSize * sizeof(TYPE));
}

~TestBuffer() { if (NULL != m_pData) free(m_pData }

public:
bool IsValid() const { return NULL != m_pData }
toán tử TYPE*() const { return m_pData }
};

lớp mẫu __declspec(dllexport) Test::TestBuffer;

__declspec(dllexport) bool GetCurrentDir(char* szDir, size_t uSize)
{
DWORD dwRequiredSize = ::GetCurrentDirectoryW(0, NULL);
Test::TestBuffer wideCharBuffer(size_t(dwRequiredSize));

bool bResult = (dwRequiredSize - 1 ==
::GetCurrentDirectoryW(dwRequiredSize, (wchar_t*)wideCharBuffer));

wcstombs(szDir, (wchar_t*)wideCharBuffer, uSize);

trả về kết quả;
}

} // không gian tên Kiểm tra

BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
char szPath[MAX_PATH] = { 0 };
Kiểm tra::GetCurrentDir(szPath, MAX_PATH);

return TRUE;
}

Đưa nó vào dự án WIN32 DLL trong VS sẽ gây ra lỗi sau:

lỗi LNK2019: ký hiệu bên ngoài chưa được giải quyết "class Test::TestBuffer __cdecl wideCharBuffer(unsigned int)" (?wideCharBuffer@@YA?AV?$TestBuffer@_W@Test@@I@Z) được tham chiếu trong hàm "bool __cdecl Test ::GetCurrentDir(char *,unsigned int)"

Tôi không chắc tại sao trình liên kết không thể tìm thấy định nghĩa vì mọi thứ đều được xác định ở đó, cùng với câu lệnh xuất cho TestBuffer. Ngoài ra, trong ví dụ này, tôi thậm chí không cần xuất một phiên bản rõ ràng của TestBuffer, vì nó không được hiển thị trong giao diện DLL, chỉ GetCurrentDir() mới có.

Bạn có đoán được tại sao mã không được tạo cho TestBuffer để trình liên kết có thể tìm thấy nó không?

Tái bút Đây là một ví dụ giả định để chứng minh sự cố chứ không phải mã sản xuất thực tế.

câu trả lời hay nhất

Trình biên dịch sẽ rộngCharBuffer Một khai báo của được coi như một khai báo hàm (phân tích khó chịu nhất). Hãy thử thay đổi nó thành:

Test::TestBuffer wideCharBuffer((size_t(dwRequiredSize)));

Về c++ - DLL được biên dịch bên ngoài lạ chưa được giải quyết, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/13146162/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress