我有两个问题 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");
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了
你把字符串读到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");
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了
你把字符串读到UnicodeString 中然,再用AnsiString s = unistring;这个就实现了转换了做用了。然后再调用你的dll,就OK了