Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将std::string传递给WriteConsole API_C++_Winapi - Fatal编程技术网

C++ 将std::string传递给WriteConsole API

C++ 将std::string传递给WriteConsole API,c++,winapi,C++,Winapi,当我编译并链接以下程序时,它不会显示任何问题 #include <Windows.h> #include <iostream> int main(int argc, const char* argv) { std::string cMessage = "Native Windows Development.\n"; WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), cMessage.c_str(), cMessa

当我编译并链接以下程序时,它不会显示任何问题

#include <Windows.h>
#include <iostream>

int main(int argc, const char* argv)
{
    std::string cMessage = "Native Windows Development.\n";
    WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), cMessage.c_str(), cMessage.size(), NULL, NULL);

    return 0;
}
#包括
#包括
int main(int argc,const char*argv)
{
std::string cMessage=“本机Windows开发。\n”;
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE),cMessage.c_str(),cMessage.size(),NULL,NULL);
返回0;
}

但当我执行程序时,它只显示了一堆?????在控制台上签名。代码有什么问题?为什么我不能使用std::string而不是const char*?

默认情况下,字符集是Unicode的,因此WriteConsole需要一个wchar字符串。你有两个选择

1) 用unicode做任何事情

int main(int argc, const char* argv)
{
    std::wstring cMessage = L"Native Windows Development.\n";
    WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), cMessage.c_str(), cMessage.size(), NULL, NULL);

    return 0;
}

2) 将默认字符集设置为mbcs

默认情况下,字符集为Unicode,因此WriteConsole需要一个wchar字符串。你有两个选择

1) 用unicode做任何事情

int main(int argc, const char* argv)
{
    std::wstring cMessage = L"Native Windows Development.\n";
    WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), cMessage.c_str(), cMessage.size(), NULL, NULL);

    return 0;
}

2) 将默认字符集设置为mbcs

输出指示您正在为Unicode编译,其中
WriteConsole()
映射到
WriteConsoleW()
。由于要写入
char
数据,请改用
writeconolea()

#包括
#包括
int main(int argc,const char*argv)
{
std::string cMessage=“本机Windows开发。\n”;
WriteConsoleA(GetStdHandle(STD_输出_句柄),cMessage.c_str(),cMessage.size(),NULL,NULL);
返回0;
}

输出的
表明您正在编译Unicode,其中
WriteConsole()
映射到
WriteConsole()
。由于要写入
char
数据,请改用
writeconolea()

#包括
#包括
int main(int argc,const char*argv)
{
std::string cMessage=“本机Windows开发。\n”;
WriteConsoleA(GetStdHandle(STD_输出_句柄),cMessage.c_str(),cMessage.size(),NULL,NULL);
返回0;
}

尝试将函数名更改为
WriteConsoleA
。尝试将函数名更改为
WriteConsoleA
。如上所述,还有第三种选择。这就是将字符集更改为mbcs将解决的问题。您的第一种选择是错误的。如果您想“用Unicode做所有事情”,那么入口点的签名是
wmain(int argc,wchar_t*argv[])
。正如我前面提到的,还有第三种选择。这就是将字符集更改为mbcs所能做的。您的第一种选择是错误的。如果您想“用Unicode做所有事情”,那么入口点的签名是
wmain(int argc,wchar\u t*argv[])