2013-03-06 69 views
0

有人可以告诉我这段代码的问题吗? 我正在建立一个Windows应用程序,而不是控制台。我正确使用功能 。我应该使用什么类型?好的,我修复了分号err和 其他错误?仍然无法正常工作。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

你能告诉我们是什么让你觉得有问题呢?我能想到的最明显的猜测是,由于您有一个名为WinMain的函数,因此它被链接为一个Windows应用程序而不是控制台应用程序,所以当您尝试设置控制台标题时,它会失败,因为没有控制台。 – 2013-03-06 19:24:44

+0

@Jerry Coffin呃,它每次都失败。但是,这些功能是不是专门用于cosole。那么你建议我做什么? – 2013-03-06 19:33:25

+0

在评论中你已经说过你不想要一个控制台应用程序。你认为你可以通过设置控制台标题而不用控制台来完成什么?也许更好的问题是:你想做什么? – 2013-03-06 19:46:16

回答

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。 所以为了解决这个问题,必须通过有效的缓冲液作为第一个参数,因为LPTSTRTCHAR*一个typedef,你应该有:

const DWORD dwSize = 128; 
TCHAR buffer[dwSize]; 
if (GetConsoleTitle(buffer, dwSize)) std::cout << "OK!" << std::endl; 
+0

感谢大家的帮助,但我特别感谢BigBoss。它现在的作品:) – 2013-03-06 19:53:03

+0

不客气 – BigBoss 2013-03-06 19:56:48

0

首先是第一件事。您的声明打印是否有错误。使用其他还有:

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

;if是一个错字,我纠正它上面。

0

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

INT WINAPI的WinMain(HINSTANCE thisin,HINSTANCE普列文,LPSTR LPSTR,INT int_)

INT _tmain(INT的argc,字符* argv的[])

也除去 ';' (分号)从'if'语句。

+0

我试过了,它不起作用。而我并没有试图制作一个控制台应用程序。 – 2013-03-06 19:39:29

+0

您使用的API是Console APP。对于Win App来说,像'SetConsoleTitle'这样的替代项有'SetWindowText','GetConsoleTitle'有'GetWindowText'。遵循我在上面的帖子中定义的程序时,你面临什么问题?您尚未为“LPTSTR缓冲区”分配内存。做'TCHAR缓冲区[MAX_PATH]'和size = MAX_PATH。 – CasperGhost 2013-03-06 19:45:26