64,654
社区成员
发帖
与我相关
我的任务
分享
DLLIMPORT __stdcall char* HiWorld(char* a)
{
//char* b;
strcpy(a,"这是一个测试!");
a=G2U(a);
a=U2G(a);
return a;
}
DLLIMPORT __stdcall char* HiWorld(char* a)
{
//char* b;
strcpy(a,"这是一个测试!");
//a=G2U(a);
//a=U2G(a);
return a;
}
//a=G2U(a);
//a=U2G(a);
传进来的a,在传进来之前,是一个数组,还是一个char*类型的指针。
如果是数组,那么就相当于改变数组首地址,这个肯定是不行的。
char* HiWorld(char* a) {
strcpy(a,"This is a test"); //这样做是可以的。
a = "abc"; //这样做事很危险的。
return a;
}
int main() {
char a[MAX_PATH];
HiWorld(a);
return 0;
}
你应当把a=G2U(a) 改成strcpy之类的代码。
DLLIMPORT __stdcall char* HiWorld(char* a)
{
char* b;
strcpy(a,"这是一个测试");
MessageBox(0,"Hello World from DLL!\n","Hi",MB_ICONINFORMATION);
//转换成utf8 开始
int len = MultiByteToWideChar(CP_ACP, 0, a, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len+1];
memset(wstr, 0, len+1);
MultiByteToWideChar(CP_ACP, 0, a, -1, wstr, len);
len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len+1];
memset(str, 0, len+1);
WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
if(wstr) delete[] wstr;
strcpy(a,str);
////转换成utf8 结束
//a=G2U(b,a);
//U2G(b,a);
return a;
}
我把G2U的代码直接copy到程序里,则可以正常运行
请大神解答!!!
感谢你,你这个解答可以使代码正常运行!
经过昨晚 测试,我也发现C++传递值要用strcpy
//utf8 to gb
char* U2G(const char* utf8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len+1];
memset(wstr, 0, len+1);
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len+1];
memset(str, 0, len+1);
WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
if(wstr) delete[] wstr;
//strcpy(gb,str);
return str;
}
U2G是网上找到把UTF8转成GB的代码