在VC6下建立了一个mfc扩展Dll,其中有个函数的参数为CString类型。在VC05下创建了一个单文档程序来测试该dll,调用如下
CMultiColorStatic c; //调用VC6下封装的类
CString str = _T("Hello world!"); //准备显示的字符
c.CStringTest("aaa") //编译时产生错误 1 error C2664: “CMultiColorStatic::CStringTest”: 不能将参数 1 从“const char [4]”转换为“CString” d:\my documents\vc6\05\dlltest\dlltest\dlltestview.cpp 106
错误。如果调用c.CStringTest(str); //则产生错误 1 error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall CMultiColorStatic::CStringTest(class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > >)" (__imp_?CStringTest@CMultiColorStatic@@QAEXV?$CStringT@_WV?$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z),该符号在函数 "public: void __thiscall CDllTestView::OnFileTest(void)" (?OnFileTest@CDllTestView@@QAEXXZ) 中被引用 DllTestView.obj
错误。但是最后我在VC6下调用时一切正常。谁来讲讲啊
CMultiColorStatic c; //调用VC6下封装的类
CString str = _T("Hello world!"); //准备显示的字符
c.CStringTest("aaa") //编译时产生错误 1 error C2664: “CMultiColorStatic::CStringTest”: 不能将参数 1 从“const char [4]”转换为“CString” d:\my documents\vc6\05\dlltest\dlltest\dlltestview.cpp 106
错误。如果调用c.CStringTest(str); //则产生错误 1 error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall CMultiColorStatic::CStringTest(class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > >)" (__imp_?CStringTest@CMultiColorStatic@@QAEXV?$CStringT@_WV?$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z),该符号在函数 "public: void __thiscall CDllTestView::OnFileTest(void)" (?OnFileTest@CDllTestView@@QAEXXZ) 中被引用 DllTestView.obj
错误。但是最后我在VC6下调用时一切正常。谁来讲讲啊
你需要显式调用构造函数c.CStringTest(CString("aaa"));
你2005的工程是不是Unicode的
改成多字节试试
我在VC6下dll里面将测试函数加上默认参数void CStringTest(CString str = "success")后,
在VC6引入库并创建对象调用该函数后能正常运行。在05下使用同一方法导入库,在编译阶段就出现错误 1 error C2440: “default argument”: 无法从“const char [8]”转换为“CString” d:\my documents\vc6\05\dlltest\multicolorstatic1.h 18
错误。有没有办法能在不修改dll中此参数的类型,也能在05下成功调用的办法啊?(要求05下是Unicode)
{
MessageBox("Test"); //或者MessageBox(_T("Test"));
}
在05里面调用都会出错。把这个函数改为返回一个int型的就不会出错,肯定是字符的问题,但是就是不知道从何下手
确切的说,使用各个版本编译器编译的"MFC扩展DLL“,在其它版本编译器编译的程序中是不可以使用的。
如果要获得通用性,推荐使用标准调用风格导出函数。
{
MessageBox("Test"); //或者MessageBox(_T("Test"));
}
函数在vc6下加载测试正确,在05下加载测试却要出错,是为什么
VC2005DLL->VC2005EXE
不同的一般不能混用,有些类是完全不同的,例如CSTRING