MultiByteToWideChar wchar * to char * - PullRequest
       0

MultiByteToWideChar wchar * to char *

0 голосов
/ 01 апреля 2011

Вот функция:

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 ]

2 голосов
/ 01 апреля 2011

Ваш компоновщик пытается найти такую ​​функцию, как:

char * ToLowerSTR(char *)

но вы определили, что ваша функция принимает WCHAR в качестве аргумента.
Посмотрите на объявление вашей функции и посмотрите, если оно говорит WCHAR* или char*

1 голос
/ 01 апреля 2011

Что говорит Default, плюс: OMG, вы помещаете вещи туда, куда указывает str, не направляя их в правильном направлении (например, new или malloc) сначала ..!

1 голос
/ 01 апреля 2011

Ошибка связана с тем, что ваш заголовочный файл объявил char * ToLowerSTR(char *), тогда как ваш файл cpp имеет другую функцию, char * ToLowerSTR(WCHAR *)

Для правильного преобразования вам нужно передать длину буфера WCHAR в вашу функцию ToLowerStr (Почему, кстати, ToLower, что он должен делать?). Вы не можете использовать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...