c++ - Windows 编程新手,遇到代码块问题

标签 c++ windows

有人可以告诉我这段代码的问题吗? 我正在构建 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++,它就会导致段错误或访问冲突。 所以为了解决它,你必须传递一个有效的缓冲区作为第一个参数,因为 LPTSTRTCHAR* 的类型定义,你应该有:

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/

相关文章:

c++ - 行时间列不是标量,具有自定义标量类型

windows - CoInternet IsFeatureEnabled 在 Delphi 2010 中

node.js - 如何避免在 Windows 主机上的 Docker 中运行 npm 的符号链接(symbolic link)问题?

windows - 部署 QML 应用程序

windows - 如何使用 Perl 在 Windows 中获取没有文件名的路径?

c++ - 除了共享库之外,g++ -fPIC 是否也适用于可执行文件?

c++ - 在 C++ 中隐藏敏感字符串的技术

c++ - std::make_unique<std::thread> 与 lambda

c++ - 为什么我们用boost::posix_time::ptime减去unix纪元得到time_t

windows - Qt - Windows 上的 SSL 错误