Вы используете параметр lpMultiByteStr [out], создав новый массив символов. Затем вы передаете этот массив символов, чтобы заполнить его. Вам нужно только инициализировать длину строки + 1, чтобы после преобразования вы могли иметь строку с нулевым завершением.
Вот несколько полезных вспомогательных функций для вас, они показывают использование всех параметров.
#include <string>
std::string wstrtostr(const std::wstring &wstr)
{
// Convert a Unicode string to an ASCII string
std::string strTo;
char *szTo = new char[wstr.length() + 1];
szTo[wstr.size()] = '\0';
WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, szTo, (int)wstr.length(), NULL, NULL);
strTo = szTo;
delete[] szTo;
return strTo;
}
std::wstring strtowstr(const std::string &str)
{
// Convert an ASCII string to a Unicode String
std::wstring wstrTo;
wchar_t *wszTo = new wchar_t[str.length() + 1];
wszTo[str.size()] = L'\0';
MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, wszTo, (int)str.length());
wstrTo = wszTo;
delete[] wszTo;
return wstrTo;
}
-
в любое время в документации, когда вы видите, что у него есть параметр, который является указателем на тип, и они скажут вам, что это из переменной, вы хотите создать такой тип, а затем передать указатель на него. Функция будет использовать этот указатель для заполнения вашей переменной.
Таким образом, вы можете понять это лучше:
//pX is an out parameter, it fills your variable with 10.
void fillXWith10(int *pX)
{
*pX = 10;
}
int main(int argc, char ** argv)
{
int X;
fillXWith10(&X);
return 0;
}
Есть ли причина, по которой вы, кажется, задаете вопросы, но не принимаете ответы? Обычно на этих сайтах хорошая практика вознаграждать хорошие ответы с обратной связью в знак признания того времени, когда люди вкладывают средства в ответ на ваш вопрос. У вас есть несколько очень хороших ответов ниже ... (nudge) – 2012-10-07 05:45:39