char和wchar_t的转换

时间:2021-12-14 20:13:16
      用了一段时间的XE4,才发现在xe4里最好将字符串设置为widestring,字符设置为wchr_t 开发调试时才不会报错,不然就得不停的重开或是clean程序。
     我有两个问题 1是从文本文件中读取出的内容赋给一个wchar型的字符型数组,显示就是乱码;
                               2是之前设置的链接的动态dll,loadlibrary(),这个函数里就必须是char才可以获取句柄,但是如果是char,程序运行没有问题,但只要修改代码就必须clean一次,不但就报内存地址错;
   求解答。。。。。

3 个解决方案

#1


根本不需要必须将字符串设置成widestring

1. 如果你文件中存放的ANSI字符,那直接读取到wchar数组,乱码是正常的,需要先读到char数组中再mbstowcs转换一下。
2. 如果你平时写代码时能注意一下字符串方面的技巧,相信你的代码在C++Builder6.0和2009+中迁移,不会费太多事。比如用这样的风格:

TCHAR szDllFile[] = TEXT("abc.dll");
HINSTANCE hLib = LoadLibrary(szDllFile);

HINSTANCE hLib = LoadLibrary(TEXT("abc.dll"));

HINSTANCE hLib = LoadLibraryA("abc.dll");

HINSTANCE hLib = LoadLibraryW(L"abc.dll");

#2


我就是不断的查找替换

#3


现在的版本字符串默认是UnicodeString,但是还有AnsiString和UTF8String,只要相互赋值,就可以得到相应编码的字符串。
你把字符串读到UnicodeString 中然,再用AnsiString s = unistring;这个就实现了转换了做用了。然后再调用你的dll,就OK了

#1


根本不需要必须将字符串设置成widestring

1. 如果你文件中存放的ANSI字符,那直接读取到wchar数组,乱码是正常的,需要先读到char数组中再mbstowcs转换一下。
2. 如果你平时写代码时能注意一下字符串方面的技巧,相信你的代码在C++Builder6.0和2009+中迁移,不会费太多事。比如用这样的风格:

TCHAR szDllFile[] = TEXT("abc.dll");
HINSTANCE hLib = LoadLibrary(szDllFile);

HINSTANCE hLib = LoadLibrary(TEXT("abc.dll"));

HINSTANCE hLib = LoadLibraryA("abc.dll");

HINSTANCE hLib = LoadLibraryW(L"abc.dll");

#2


我就是不断的查找替换

#3


现在的版本字符串默认是UnicodeString,但是还有AnsiString和UTF8String,只要相互赋值,就可以得到相应编码的字符串。
你把字符串读到UnicodeString 中然,再用AnsiString s = unistring;这个就实现了转换了做用了。然后再调用你的dll,就OK了