gpt4 book ai didi

c++ - 奇怪的 Unresolved external 编译 DLL

转载 作者:可可西里 更新时间:2023-11-01 11:13:28 27 4
gpt4 key购买 nike

我正在尝试按照本网站上的说明进行操作: http://support.microsoft.com/kb/q168958

代码如下:

#include <windows.h>
#include <malloc.h>

namespace Test {

template<class TYPE> class TestBuffer
{
private:
TYPE* m_pData;
size_t m_uSize;

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; }
operator TYPE*() const { return m_pData; }
};

template class __declspec(dllexport) Test::TestBuffer<wchar_t>;

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

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

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

return bResult;
}

} // namespace Test

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

return TRUE;
}

将其放入 VS 中的 WIN32 DLL 项目中会出现以下错误:

error LNK2019: unresolved external symbol "class Test::TestBuffer<wchar_t> __cdecl wideCharBuffer(unsigned int)" (?wideCharBuffer@@YA?AV?$TestBuffer@_W@Test@@I@Z) referenced in function "bool __cdecl Test::GetCurrentDir(char *,unsigned int)"

我不确定为什么链接器找不到定义,因为一切都在那里定义,连同 TestBuffer 的导出语句。此外,在示例中,我什至不需要导出 TestBuffer 的显式实例化,因为它没有在 DLL 接口(interface)中公开,只有 GetCurrentDir() 是。

关于为什么没有为 TestBuffer 生成代码以便链接器可以找到它的任何猜测?

附言这是一个人为的例子来演示问题,而不是实际的生产代码。

最佳答案

编译器将 wideCharBuffer 的声明视为函数声明 (most vexing parse)。尝试将其更改为:

Test::TestBuffer<wchar_t> wideCharBuffer((size_t(dwRequiredSize)));

关于c++ - 奇怪的 Unresolved external 编译 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13146162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com