我尝试使用迅雷下载开放引擎(动态连接库)写一个mfc的应用程序,发现程序只有改成Unicode字符集的时候程序才可以找到库里面的函数,字符集改成多字符集的时候,报错如下: 1>downloadDlg.obj : error LNK2019: 无法解析的外部符号 "unsigned long __stdcall XLURLDownloadToFile(char const *,char const *,char const *,long &)" (?XLURLDownloadToFile@@YGKPBD00AAJ@Z),该符号在函数 "public: void __thiscall CdownloadDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CdownloadDlg@@QAEXXZ) 中被引用
1>G:\work\download\Debug\download.exe : fatal error LNK1120: 1 个无法解析的外部命令我的程序是多字符集的,这个问题如何解决呢?能不能自己写一个dll把迅雷的动态连接库封装起来解决这个字符集的问题?

解决方案 »

  1.   

    字符串参数等受到字符集影响。如果要ANSI,可以自己先转换字符串,然后再传入参数调用
      

  2.   

    所以现在我都用TCHAR来做了。
      

  3.   

    我现在也在艰难的把char改成TCHAR,LPCSTR 要改成LPCTSTR.这两种情况还算好的,也算是多字符和Unicode可以通用。但是有写东西不能通用的呀,还有相关的函数都要改成Unicode。比如:strcpy要改成_tcscpy
    string要改成wstring。有没有tstring的.
      

  4.   

    都说的很有道理。
    如果环境设置为unicode,应该修改一些什么内容呢?
    有一些能改成T的还好可以在两种状态下编译。
    char --> TCHAR
    有些不行的像string,总没有tstring这样的吧
    string --> wstring
      

  5.   

    如果是跨字符集DLL调用的话,就必须将接口函数改为char,然后在调用函数前使用WideCharToMultiByte将宽字符转换成多字节字符,然后在函数里调用MultiByteToWideChar,将多字节字符转换成宽字符UNICODE.
    当然这相当的麻烦,所以建议在同一个工程中最好使用同一种字符集.