有人可以告诉我这段代码的问题吗? 我正在构建 Windows 应用程序,而不是控制台。我在使用这些功能吗 正确。我应该使用什么类型?好的,我修复了分号错误和 其他错误?仍然无法正常工作。
#include <windows.h>
int WINAPI WinMain(HINSTANCE thisin,HINSTANCE previn,LPSTR lpstr,INT int_)
{
LPTSTR buffer;
DWORD size;
SetConsoleTitle("Console Title");
if(!GetConsoleTitle(buffer,size))
cout << "error" << endl;
else cout << *buffer << endl;
system("Pause");
return 0;
}
最佳答案
它有两个问题,第一个是';'最后如果这是一个 C++ 错误输入并且每个人都这么说,但第二个是:对于每个获取缓冲区以返回某些内容的 API,您应该提供一个有效的缓冲区。假设 GetConsoleTitle
实现为:
BOOL GetConsoleTitle(LPTSTR p, DWORD dwSize)
{
LPTSTR actualTitle = /* Get actual title from somewhere */;
while (dwSize--)
{
*p++ = *actualTitle++;
if (!*p++) return TRUE;
}
// Not enough buffer
return FALSE;
}
现在看看你的程序,你将一个未初始化的 LPTSTR
传递给函数,一旦 API 调用 *p++ = *actualTitle++
,它就会导致段错误或访问冲突
。
所以为了解决它,你必须传递一个有效的缓冲区作为第一个参数,因为 LPTSTR
是 TCHAR*
的类型定义,你应该有:
const DWORD dwSize = 128;
TCHAR buffer[dwSize];
if (GetConsoleTitle(buffer, dwSize)) std::cout << "OK!" << std::endl;
关于c++ - Windows 编程新手,遇到代码块问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15256120/