函数调用问题,愁死了,虽然是个老问题,还是希望大家帮我看看
///////////////
用的是VS2008, 使用的unicode
//////////////
有个写好的socket库,里面有这个函数,用来连接的,这的IP要CString类型的。
DWORD SockConnect(const CString szIP, int Port, SOCKET& ConnectSock);
我是这么调用的:
CString IP="127.0.0.1";
SockConnect(IP,2000,conSock);
编译提示:error C2440: “初始化”: 无法从“const char [10]”转换为“ATL::CStringT<BaseType,StringTraits>”
网上查了这个问题,然后又改成如下的调用:(同样是在CSDN上看到的一个伙计跟我的问题一样,他就解决了,我这么用就不对)
LPCTSTR IP=_T("127.0.0.1");
SockConnect((LPCTSTR)IP,2000,conSock);
编译提示:
无法解析的外部符号 "unsigned long __cdecl SockConnect(class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > >,int,unsigned int &)" (?SockConnect@@YAKV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@HAAI@Z),该符号在函数 _main 中被引用
/////这个是我也查了,由于是引用了库了,可能是参数给的不对造成的。
麻烦大家帮我看看吧,,虽然这是个很普遍的问题,网上一搜一堆,我还是搞不定。
[解决办法]
- C/C++ code
CString IP=_T("127.0.0.1");SockConnect(IP,2000,conSock);
[解决办法]
可能那个库是多字节版本的。
或者,那个库的 WCHAR 不是内置的。
[解决办法]
未设置就表示没有定义 UNICODE 宏。此时是多字节的。
直接使用 xxxxA 类的函数来调用这个库。
如果需要传递字符串,手动进行 A 和 W 的转换。
[解决办法]
也就是说编译通过了,链接过不了,应该是不同的编译器编译出来的库吧,你程序中的C++函数名经处理后和库中的名字不一致,因此无法链接。
如果有可能拿到源码,用你的编译器重新编译库,这样链接就不成问题了。