C++ Windows编程新手,代码块有问题
有人能告诉我这段代码的问题吗? 我正在构建一个windows应用程序,而不是控制台。我正在使用这些函数吗 正确地我应该使用什么类型?好的,我修正了分号err和 否则会出错吗?仍然不能正常工作C++ Windows编程新手,代码块有问题,c++,windows,C++,Windows,有人能告诉我这段代码的问题吗? 我正在构建一个windows应用程序,而不是控制台。我正在使用这些函数吗 正确地我应该使用什么类型?好的,我修正了分号err和 否则会出错吗?仍然不能正常工作 #include <windows.h> int WINAPI WinMain(HINSTANCE thisin,HINSTANCE previn,LPSTR lpstr,INT int_) { LPTSTR buffer; DWORD size; SetConsoleT
#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;
}
#包括
int WINAPI WinMain(HINSTANCE thisin、HINSTANCE previn、LPSTR LPSTR、int int_)
{
LPTSTR缓冲器;
德沃德尺寸;
设置控制台标题(“控制台标题”);
如果(!GetConsoleTitle(缓冲区,大小))
cout第一件事是第一件事。您的语句将打印是否存在错误。在那里使用else:
if(!GetConsoleTitle(buffer,size))
cout << "error" << endl;
else
cout << *buffer << endl;
if(!GetConsoleTitle(缓冲区,大小))
cout您正在为控制台应用程序使用API。创建控制台应用程序,将此代码复制到控制台项目c或cpp源文件并替换
int WINAPI WinMain(HINSTANCE thisin、HINSTANCE previn、LPSTR LPSTR、int int_)
与
int _tmain(int argc,char*argv[])
也从“IF”语句中删除“;”(分号)。
< P>它有2个问题,首先是“;”,如果C++是MISYYPHIN错误,每个人都会这样说,但第二个是:对于每一个获得缓冲区返回的API,都应该提供一个有效的缓冲区。假设<>代码GETCONSOLITETES/<代码>实现为:
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++
,它将导致分段错误或访问冲突。
因此,为了解决这个问题,您必须传递一个有效的缓冲区作为第一个参数,因为LPTSTR
是TCHAR*
的typedef,所以您应该:
const DWORD dwSize = 128;
TCHAR buffer[dwSize];
if (GetConsoleTitle(buffer, dwSize)) std::cout << "OK!" << std::endl;
常量DWORD dwSize=128;
TCHAR缓冲区[dwSize];
if(GetConsoleTitle(缓冲区,dwSize))std::你能告诉我们是什么让你觉得有问题吗?我能想到的最明显的猜测是,因为你有一个名为WinMain的函数,它被链接为windows应用程序,而不是控制台应用程序,所以当你试图设置控制台标题时,它失败了,因为没有控制台。@Jerry Coffin,它每次都失败。但是这些函数不是专门用于cosole的。那么你建议我怎么做?在评论中你说你不想要一个控制台应用程序。你认为在没有控制台的情况下尝试设置控制台标题会实现什么?也许还有一个更好的问题:你想做什么?创建wi需要更多的设置代码ndow,比如在操作系统上注册。请参阅Petzold关于Windows API的书,或者使用wxWidgets或QT等框架。我尝试过,但它不起作用。我也不尝试制作控制台应用程序。您正在使用的API用于控制台应用程序。对于Win应用程序,有类似“SetConsoleTitle”的替代选项,例如“SetWindowText”、“GetConsoleTitle”等re是“GetWindowText”。按照我在上面的帖子中定义的过程进行操作时,您会遇到什么问题?您还没有为“LPTSTR buffer”分配内存。请使用“TCHAR buffer[MAX_PATH]”和size=MAX_PATH。感谢大家的帮助,但我特别感谢BigBoss。它现在可以工作了:)