【发布时间】:2013-02-03 05:01:15
【问题描述】:
我有 2 个 C++ (MFC) 项目 一个是我在第二个(可执行的)中使用的库项目。
它们一起工作得很好,直到我从常规项目中调用一个以 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,但库将其设置为多字节字符集。我真的无法更改它们而不会出现大量可笑的错误。
有什么建议吗?
编辑:我们在这两个项目中设置不同的原因是因为可执行项目基本上是我的小组没有构建或创建的外部项目。我们只需要把它带进来并使用它。图书馆项目是我们几年来一直在努力的事情。
【问题讨论】:
-
调用库中采用 int 的函数(例如)没有问题
-
我不确定您将哪个称为 常规项目,但假设您正在调用库项目中返回
CString的函数,请尝试存储在 exe 项目中以CStringA的形式返回值。但即使编译成功,如果两者的 UNICODE 设置不同,我也会警惕从库中传递 MFC 类型。 -
在设计库的界面时,
CString类型的参数是相当邪恶的事情。 -
在调用此函数时,您可能需要从 A 转换为 W(或从 W 转换为 A)
-
@irco 然后在调用库函数之前将其转换为exe中的
CStringA。我相信这可以通过CStringA cstra( source_cstr.GetString() ); libfunction( cstra );
标签: c++ mfc cstring unicode-string