Win32 控制台写入 (C/C++)
Win32 console write (C/C++)
我想在 C++ 程序中写入控制台而不使用 'std' 库,也就是说,只使用 "Windows.h" 中的函数。原因是我想深入研究可移植的可执行文件并查看调用的是这个函数,而不是一堆函数层。任何人都知道如何做到这一点 and/or 我在哪里可以找到 "Windows.h" 函数的指南?
使用纯 Win API:
HANDLE stdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (stdOut != NULL && stdOut != INVALID_HANDLE_VALUE)
{
DWORD written = 0;
const char *message = "hello world";
WriteConsoleA(stdOut, message, strlen(message), &written, NULL);
}
MSDN 是最好的文档来源之一:
替代 Win32 API:
#ifndef UNICODE
std::stringstream ss;
ss << TEXT("Hello world!") << std::endl;
OutputDebugString(ss.str().c_str());
OutputDebugStringA(ss.str().c_str());
#endif
#ifdef UNICODE
std::wstringstream wss;
wss << TEXT("Hello world!") << std::endl;
OutputDebugString(ss.str().c_str());
OutputDebugStringW(wss.str().c_str());
#endif
* OutputDebugString 是一个宏。
参考:
我想在 C++ 程序中写入控制台而不使用 'std' 库,也就是说,只使用 "Windows.h" 中的函数。原因是我想深入研究可移植的可执行文件并查看调用的是这个函数,而不是一堆函数层。任何人都知道如何做到这一点 and/or 我在哪里可以找到 "Windows.h" 函数的指南?
使用纯 Win API:
HANDLE stdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (stdOut != NULL && stdOut != INVALID_HANDLE_VALUE)
{
DWORD written = 0;
const char *message = "hello world";
WriteConsoleA(stdOut, message, strlen(message), &written, NULL);
}
MSDN 是最好的文档来源之一:
替代 Win32 API:
#ifndef UNICODE
std::stringstream ss;
ss << TEXT("Hello world!") << std::endl;
OutputDebugString(ss.str().c_str());
OutputDebugStringA(ss.str().c_str());
#endif
#ifdef UNICODE
std::wstringstream wss;
wss << TEXT("Hello world!") << std::endl;
OutputDebugString(ss.str().c_str());
OutputDebugStringW(wss.str().c_str());
#endif
* OutputDebugString 是一个宏。
参考: