这是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 *?
答案 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
点,而不是指向正确的方向(如new
或malloc
)..!