描述:
error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > __thiscall HttpClient::GetMethod(wchar_t const *)" (__imp_?GetMethod@HttpClient@@QAE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@PB_W@Z),该符号在函数 "protected: wchar_t * __thiscall CAXDCtrl::Test(wchar_t const *)" (?Test@CAXDCtrl@@IAEPA_WPB_W@Z) 中被引用
1、是用一个MFC的ActiveX工程引用了一个win32的动态库
2、两个工程的编码统一为unicode
3、所需头文件和Lib都正确引用(因为如果是使用HttpClient下的另外一个无参的函数时正常)
基于以上3点,错误基本能确定是因为我传入的参数不正确
wstring HttpClient::GetMethod( LPCTSTR url ) 这个是GetMethod函数的定义
调用如下:
BSTR CAXDCtrl::Test(LPCTSTR str)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
HttpClient hc;
hc.OpenSession(); //此处正常
wstring ws = hc.GetMethod(str); //此处报错, 注释掉可成功
CString strResult = str;
// TODO: 在此添加调度处理程序代码
return strResult.AllocSysString();
}
请高人指点这是什么原因,谢谢
解决方案1:
wstring 换掉试试
解决方案2:同意 unicode的原因
解决方案3: HttpClient是java或者.net的那个类吗? 直接封到dll中给C++用的?还是自己写的?
wchar_t就是双字节的,应该是UNICODE的原因,改一下 Mt或者MD看看。
引用的win32的动态库不是unicode版本的
的确看来应该是编码问题,你直接填写个url试试,如果可行,然后下个断调试一下str
解决方案6:楼主调用WideCharToMultiByte将unicode的str转换成多字节试试
解决方案7:也就是新生成工程时,默认的是UNICODE字符集,选择多字节集.也可以随时改,在工程里的属性里,把字符集改成多字节
解决方案8:在工程里改成多字节就行了,不要用UNICODE字符集
解决方案9:看着像是字符集问题,把LPCTSTR改为宽字符指针或者多字节字符指针看看行不行