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

时间:2013-03-06 19:20:57

标签: 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;
 }

3 个答案:

答案 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。 所以为了解决它,你必须传递一个有效的缓冲区作为第一个参数,因为LPTSTRTCHAR*的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'陈述。