您的位置:首页 > 其它

CString导致使用Dll动态库无法编译的问题

2012-07-19 23:09 561 查看
今天编译popo库,它用的是 Use MFC in a Shared DLL, 编译后的结果为Dll,我自己有一个客户端工程,要使用该Dll,它使用MFC时Use MFC in a Static Library,结果老是编译不过去,报错如下

1>PoPoTest.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall popo::ui::CSkinObject::SetObjectID(class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > >)" (__imp_?SetObjectID@CSkinObject@ui@popo@@QAEXV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z)
referenced in function "public: virtual int __thiscall CPoPoTestApp::InitInstance(void)" (?InitInstance@CPoPoTestApp@@UAEHXZ)

通过objdump /t看了下,结果存在一个这样的符号,

__imp_?SetObjectID@CSkinObject@ui@popo@@QAEXV?$CStringT@_WV?$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z

猜测是CString的第二个模板实参的问题,在头文件中把

void    SetObjectID(const CString sID);


修改为

void    SetObjectID(const CStringT<TCHAR, StrTraitMFC_DLL<TCHAR, ChTraitsCRT<TCHAR> > > sID);


在使用的地方按照该方式使用,

CStringT<TCHAR, StrTraitMFC_DLL<TCHAR, ChTraitsCRT<TCHAR> > > csId(_T("MainForm"));
pMainForm->SetObjectID(csId);


好了,可以编译了。

但是不知道这样的话会不会出问题,翻了下代码,也没看出来

StrTraitMFC_DLL


StrTrait_DLL


有什么区别,请大牛们指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐