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


今天编译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);

修改为

扫描二维码关注公众号,回复: 6122266 查看本文章
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

有什么区别,请大牛们指正。

猜你喜欢

转载自blog.csdn.net/winterain/article/details/7765248