MultiByteToWideChar wchar * to char *

时间:2011-04-01 08:43:26

标签: c

这是func:

char *ToLowerSTR(/*char*/ WCHAR* buffer) // NEED TO FIX UNRESOLVED EXTERNAL
{
    CHAR* str;
    MultiByteToWideChar(CP_ACP, 0, str, strlen(str) + 1, buffer, sizeof(buffer)/sizeof(WCHAR));
....
return str;
}

和错误:

  

LNK2019:未解析的外部符号   “char * __cdecl ToLowerSTR(char *)”   (?ToLowerSTR @@ YAPADPAD @ Z)引用   在函数“unsigned long __cdecl   GetPID(char *)“)

如何将wchar *转换为char *?

3 个答案:

答案 0 :(得分:2)

您的链接器正在尝试查找以下函数:

char * ToLowerSTR(char *)

但您已定义了以WCHAR为参数的函数 查看您的函数声明,看看它是WCHAR*还是char*

答案 1 :(得分:1)

错误是由于您的头文件声明char * ToLowerSTR(char *)而您的cpp文件具有不同的函数char * ToLowerSTR(WCHAR *)

为了正确转换,你需要将WCHAR缓冲区的长度传递给你的ToLowerStr函数(为什么要降低btw,它应该做什么?)。你不能在传递的sizeof上使用WCHAR * - 它会给你一个指针的大小,而不是它指向的缓冲区的长度。

bool charToWChar(char const * Source, wchar_t * Dest, size_t DestLen) {
  return MultiByteToWideChar(CP_ACP, 0, Source, -1, Dest, DestLen) != 0;
}

然后这样称呼:

char const * myString = "abc";
wchar_t Buffer[100];
charToWChar(myString, Buffer, 100);

答案 2 :(得分:1)

什么默认说,加上:OMG,你把东西放到str点,而不是指向正确的方向(如newmalloc)..!