0

有人可以告诉我这段代码的问题吗?我正在构建一个 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;
 }
4

3 回答 3

1

它有两个问题,首先是';' 最后,如果这是一个 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一个 typedef :TCHAR*

const DWORD dwSize = 128;
TCHAR buffer[dwSize];
if (GetConsoleTitle(buffer, dwSize)) std::cout << "OK!" << std::endl;
于 2013-03-06T19:38:21.670 回答
0

第一件事是第一件事。您的声明会打印是否有错误。在那里使用 else :

if(!GetConsoleTitle(buffer,size))
    cout << "error" << endl;
else
    cout << *buffer << endl; 

;if的错字之后,我在上面更正了。

于 2013-03-06T19:24:27.383 回答
0

您正在为控制台应用程序使用 API。创建一个控制台应用程序,将此代码复制到控制台项目 c 或 cpp 源文件并替换

int WINAPI WinMain(HINSTANCE thisin,HINSTANCE previn,LPSTR lpstr,INT int_)

int _tmain(int argc, char *argv[])

也删除';' (分号)来自“if”语句。

于 2013-03-06T19:26:40.767 回答