奇异的未解决的外部编译DLL
Bizarre unresolved external compiling DLL
我正在尝试按照本网站上的说明进行操作: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接口中展示,只有getCurrentDir()是。
。关于为什么未生成testbuffer的代码以便链接器可以找到它的任何猜测?
P.S。这是一个人为证明问题的例子,而不是实际的生产代码。
编译器将wideCharBuffer
的声明视为函数声明(最烦人的解析)。尝试将其更改为:
Test::TestBuffer<wchar_t> wideCharBuffer((size_t(dwRequiredSize)));
相关文章:
- 在使用 Clang 编译 DLL 时指定 DEF 文件
- 如何使用导出的函数交叉编译 DLL
- 从DLL导出函数,LoadLibrary()需要用TEXT转换的字符串才能编译而不会出错
- 为什么我可以在EXE上编译DLL
- 在 Windows 10 上使用 CZMQ 编译 dll 时出错
- 使用签证编译 dll / exe - 链接失败
- 奇异的未解决的外部编译DLL
- 使用 ATL 编译 dll,并将方法参数作为接口,但将它们作为 coclass 获取
- 调用 CUDA 编译.dll从 R - .C 与 .叫
- 如何在编译DLL时添加includes
- 使用VS编译器在Qt中编译dll,以便在Borland中使用
- 在Microsoft Visual c++ 2015中编译DLL -警告C4251需要有DLL接口供类的客户端使用-当使
- 编译DLL中指定的接口
- 替换反编译DLL中的函数
- MS Visual C c++编译DLL供Delphi使用
- 编译DLL注入器时生成失败
- 在msvc++ 2010中,在调试配置中用静态链接编译DLL时,链接器错误
- 我可以不使用Visual Studio编译dll吗?
- 在 c 中编译 dll 时传递参数
- 用英特尔编译器编译DLL时出错