有人可以告诉我这段代码的问题吗? 我正在构建一个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;
}
答案 0 :(得分:1)
它有2个问题,首先是';'如果这是一个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++
后立即导致细分错误或Access violation
。
所以为了解决它,你必须传递一个有效的缓冲区作为第一个参数,因为LPTSTR
是TCHAR*
的typedef,你应该有:
const DWORD dwSize = 128;
TCHAR buffer[dwSize];
if (GetConsoleTitle(buffer, dwSize)) std::cout << "OK!" << std::endl;
答案 1 :(得分:0)
首先是第一件事。您的语句打印是否有错误。在那里使用其他:
if(!GetConsoleTitle(buffer,size))
cout << "error" << endl;
else
cout << *buffer << endl;
以及;
之后的if
是一个错字,我在上面进行了更正。
答案 2 :(得分:0)
您正在使用控制台应用的API。创建一个控制台应用程序,将此代码复制到控制台项目c或cpp源文件并替换
int WINAPI WinMain(HINSTANCE thisin,HINSTANCE previn,LPSTR lpstr,INT int _)
与
int _tmain(int argc,char * argv [])
也删除';' (分号)来自'if'陈述。