C++ 带有COM的未解析外部符号

C++ 带有COM的未解析外部符号,c++,com,linker-errors,lnk2019,C++,Com,Linker Errors,Lnk2019,我正在编写一个小类,用于通过COM读取excel文件。到目前为止,一切正常,但当我尝试读取单元格的值时除外 在测试期间,我最初从构造函数调用getCell(),只是为了检查它是否正常工作,并且一切正常。一旦我开始从文件外部调用getCell(),我就会得到一个LNK2019 以下是一个简短的示例: ExcelIO.h 导入DLL/OLB文件时,它应该创建一对自动编译到项目中的文件--a.TLH和a.TLI文件。每一次导入都应该有一对。.TLH是头,.TLI是实现。链接错误似乎表明您正在查找.TL

我正在编写一个小类,用于通过COM读取excel文件。到目前为止,一切正常,但当我尝试读取单元格的值时除外

在测试期间,我最初从构造函数调用
getCell()
,只是为了检查它是否正常工作,并且一切正常。一旦我开始从文件外部调用
getCell()
,我就会得到一个LNK2019

以下是一个简短的示例:

ExcelIO.h

导入DLL/OLB文件时,它应该创建一对自动编译到项目中的文件--a.TLH和a.TLI文件。每一次导入都应该有一对。.TLH是头,.TLI是实现。链接错误似乎表明您正在查找.TLH,但由于某些原因,Visual Studio没有将.TLI编译到您的项目中

仔细检查以确保文件在项目目录中,并且函数Excel::Range::GetItem()在这两个目录中

尝试从xlWorkSheet类声明中删除getCell专用版本的空声明。即,删除此位:

template <>
string getCell<string>(int m, int n);
模板
字符串getCell(int m,int n);
…只需留下下面的专业知识。另外,要么将专门化标记为“inline”,要么将其完全移动到类内部

如果这没有帮助,请尝试编写一个简单的、常规的函数(不是模板专门化,而是函数),该函数执行专门化版本的操作,即返回字符串。试着先从main.cpp调用它。你仍然得到链接错误


最后,如果这没有帮助——并且假设TLH/TLI文件在那里并且函数在其中,那么尝试手动(仅用于测试)#将.TLI文件包括在一个CPP文件中(或临时将TLI文件添加到项目中),然后重新构建。实际上,您不需要这样做,但如果它消除了错误,那么至少它会揭示问题的根源。

这是一个奇怪的问题,GetItem()是自动生成的.tli文件提供的内联函数。但是编译器不知何故没有将其发送到.obj文件中。从
\u variant\u t
到t的隐含转换本身就是可疑的。VS版本需要记录在案。
LNK2019: unresolved external symbol "public: class _variant_t __thiscall Excel::Range::GetItem(class _variant_t const &,class _variant_t const &)" (?GetItem@Range@Excel@@QAE?AV_variant_t@@ABV3@0@Z) referenced in function "public: double __thiscall xlWorksheet::getCell<double>(int,int)" (??$getCell@N@xlWorksheet@@QAENHH@Z)
template <>
string getCell<string>(int m, int n);