Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Windows编程新手,代码块有问题_C++_Windows - Fatal编程技术网

C++ Windows编程新手,代码块有问题

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

有人能告诉我这段代码的问题吗? 我正在构建一个windows应用程序,而不是控制台。我正在使用这些函数吗 正确地我应该使用什么类型?好的,我修正了分号err和 否则会出错吗?仍然不能正常工作

#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。它现在可以工作了:)