该项目建立在Win32平台上,而不是在x64上。
完整的错误消息:
dllentry.obj:错误LNK2001:无法解析的外部符号“类CFactoryTemplate * g_Templates”(?g_Templates @@ 3PAVCFactoryTemplate @@ A)
dllentry.cpp可以在两个平台上编译。它包含外部声明:
extern CFactoryTemplate g_Templates[];
extern int g_cTemplates;
然后,在两个函数中使用g_Templates []:
__control_entrypoint(DllExport) STDAPI DllGetClassObject(__in REFCLSID rClsID,
__in REFIID riid, __deref_out void **pv)
{
...
for (int i = 0; i < g_cTemplates; i++)
{
const CFactoryTemplate * pT = &g_Templates[i];
}
}
和
DllInitClasses(BOOL bLoading)
{
...
for (int i = 0; i < g_cTemplates; i++)
{
const CFactoryTemplate * pT = &g_Templates[i];
}
}
我检查了项目设置中的所有库,并且似乎都没问题,使用的是64位版本。我应该怎么做才能为x64平台构建项目?
最佳答案
您在对先前答案的评论中表示
另一个有效的定义位于myClass.cpp(
项目)“ CFactoryTemplate * g_Templates = 0;”其次是'int
g_cTemplates = 0;'在文件的最上层,紧接在
包含。
您对g_Templates
的定义与其声明不一致。
声明是
extern CFactoryTemplate g_Templates[];
这将
g_Templates
声明为CFactoryTemplate
的数组(大小未知)。但是你的定义CFactoryTemplates* g_Templates = 0;
将其定义为指向
CFactoryTemplate
的指针,这不一样。因此,您未能提供与声明匹配的
g_Templates
定义,并且错误消息是正确的。您需要获得声明和定义才能同意。一种方法是写
CFactoryTemplates g_Templates[1];
创建与声明一致的定义。 (请注意,C ++中不允许使用零长度数组,因此,我们创建了一个长度为1的数组,并忽略其中的元素。)
另一个是将声明更改为
extern CFactoryTemplates* g_Templates;
关于c++ - LNK2001:为x64平台构建时无法解析的外部符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24700229/