有人可以告诉我这段代码的问题吗?
我正在建立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++,它将导致分段错误或Access violation
因此,为了解决该问题,您必须传递一个有效的缓冲区作为第一个参数,并且由于LPTSTRTCHAR*的typedef,因此您应该具有:

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/

10-10 21:20