2

我在 c++ (MFC) 中有 2 个项目一个是库项目,我在第二个项目中使用它(一个可执行文件)。

它们一起工作得很好,直到我从常规项目中调用一个以 CString 作为参数的函数。我收到这样的链接器错误

error LNK2019: unresolved external symbol "public: void __thiscall 
CTextDisplay::SetText1(class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,
class ATL::ChTraitsCRT<wchar_t> > >)" (?SetText1@CTextDisplay@@QAEXV?$CStringT@_WV?
$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z) referenced in function 
"public: void __thiscall CManualPane::SetBeadCountFor(int,double)" 
(?SetBeadCountFor@CManualPane@@QAEXHN@Z)    C:\source\IQ-Project\IQ\ManualPane.obj  IQ

可执行项目将其字符集设置为 UNICODE,但库将其设置为多字节字符集。我真的无法改变它们而不会出现大量可笑的错误。

有什么建议么?

编辑:我们在这两个项目中设置不同的原因是因为可执行项目基本上是我的小组没有构建或创建的外部项目。我们只需要把它带进来并使用它。图书馆项目是我们几年来一直在努力的事情。

4

2 回答 2

3

当您在可执行文件中包含库项目的标头时,可能会在函数声明中使用 typedef。由于可执行文件使用 UNICODE,因此声明现在使用 UNICODE。但是,库实现仍然在 MultiByte 中,因此定义与导致链接器错误的声明不匹配。

查看这些 typedef 是如何设置的,您可能可以在包含的标头周围做一些特殊的#define、#undef。

于 2013-02-18T17:45:40.930 回答
1

最后证明,避免在同一个解决方案中使用 unicode 和多字节项目是一个更好的主意,所以我将它全部移到 unicode 并从那里开始

于 2014-11-04T16:48:27.630 回答