Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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.h正常工作,编译前没有错误消息。_C++_Winapi - Fatal编程技术网

C++ 无法让Windows.h正常工作,编译前没有错误消息。

C++ 无法让Windows.h正常工作,编译前没有错误消息。,c++,winapi,C++,Winapi,因此,我目前一直在尝试显示windows api(语言为c++),当我尝试运行该程序时,会出现以下错误。(尽管我现在在显示红色下划线时出现了错误)。我目前正在使用VisualStudioCommunity作为我的IDE “函数”int\u cdel invoke(main(void))中的未解析外部符号\u main引用” “1已解析外部” 我已经在线检查过了,并将其作为win 32控制台程序和win 32项目(有些人将其列为解决该程序的方法)进行了尝试。但是没有结果。我不知道可能出现什么错误。

因此,我目前一直在尝试显示windows api(语言为c++),当我尝试运行该程序时,会出现以下错误。(尽管我现在在显示红色下划线时出现了错误)。我目前正在使用VisualStudioCommunity作为我的IDE

“函数”int\u cdel invoke(main(void))中的未解析外部符号\u main引用”

“1已解析外部”

我已经在线检查过了,并将其作为win 32控制台程序和win 32项目(有些人将其列为解决该程序的方法)进行了尝试。但是没有结果。我不知道可能出现什么错误。(也作为参考,我使用以下教程作为起点,但我不使用OpenGL库,因为我所要做的只是制作一个非常简化的win32窗口模板)。有什么想法吗

代码:main.h

#pragma once
#pragma once
#include<Windows.h>
#include<tchar.h>
#include<iostream>
#define WINDOW_WIDTH = 800 //remember to leave off the ; at the end of define sets(currently not being used
#define WINDOW_HEIGHT = 600
HWND hWnd;
#pragma一次
#布拉格语一次
#包括
#包括
#包括
#define WINDOW_WIDTH=800//请记住在define set(当前未使用)的末尾取消;选项
#定义窗高度=600
HWND-HWND;
代码:main.cpp

#include "main.h" //remember <> means library, "" means within your project. 
// long results, CALL BACK, windows procedure, basically the basics of what to do. UINT (unsigned INT)
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch (msg) {
    case WM_CREATE:
        break;
    case WM_DESTROY:
    case WM_QUIT:
    case WM_CLOSE:
        PostQuitMessage(0);
        break;
    }
    return DefWindowProc(hWnd, msg, wParam, lParam);
}
/*
remember that this is a run time instance, and is in essence the same as Main (char[args]) {}
returning 0 ends the operation of the win32 library.
*/
int WINAPI winMain(HINSTANCE hInstance, HINSTANCE hPrevious, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASS wc; //default instance for the scope of the window (new window named WC for WINDOW CLASS)
    MSG msg;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); //default background color, set to stock light gray
    wc.hCursor = LoadCursor(hInstance, IDC_ARROW); //default cursor
    wc.hInstance = hInstance;
    wc.lpfnWndProc = WndProc;
    wc.lpszClassName = _T("NAME");
    wc.lpszMenuName = NULL;
    wc.style = CS_VREDRAW | CS_HREDRAW;  //windows style in bit form, 0X00 hex if you were to print them
    if (!RegisterClass(&wc)) //pointer the to the window, if it doesn't exist call this simple error handle
    {
        MessageBox(NULL, _T("error: cannot reg window class"), _T("error"), MB_OK);
        return 0; // kills 
    }
    hWnd = CreateWindow(L"NAME", //reference of the object already defined as wc
        L"Window Title", //title
        WS_OVERLAPPEDWINDOW, //basic window style
        0, //x start,
        0, //y start,
        800,
        600,       //set all the dimensions to default value
        NULL,                //no parent window
        NULL,                //no menu
        hInstance,
        NULL);
    if (!hWnd)
    {
        MessageBox(NULL, L"ERROR: cannot create window", L"ERROR!", MB_OK);
        return 0;
    }
    while (1)
    {
        while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) {
            if (GetMessage(&msg, NULL, 0, 0))
            {
                break;
            }
        }
        DispatchMessage(&msg);
        TranslateMessage(&msg);
    }
    return(int)msg.wParam;
}
#包括“main.h”//memory-means-library”、“在项目中的意思。
//长结果、回调、windows过程、基本操作的基础。UINT(unsigned INT)
LRESULT回调WndProc(HWND HWND,UINT msg,WPARAM WPARAM,LPARAM LPARAM){
开关(msg){
案例WM_创建:
打破
案例WM_销毁:
案例WM_退出:
案例WM_结束:
PostQuitMessage(0);
打破
}
返回DefWindowProc(hWnd、msg、wParam、lParam);
}
/*
请记住,这是一个运行时实例,本质上与Main(char[args]){}相同
返回0将结束win32库的操作。
*/
int WINAPI winMain(HINSTANCE HINSTANCE、HINSTANCE hPrevious、LPSTR lpCmdLine、int nCmdShow)
{
WNDCLASS wc;//窗口范围的默认实例(窗口类的新窗口名为wc)
味精;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)GetStockObject(LTGRAY_BRUSH);//默认背景色,设置为浅灰色
wc.hCursor=LoadCursor(hInstance,IDC_箭头);//默认光标
wc.hInstance=hInstance;
wc.lpfnWndProc=WndProc;
wc.lpszClassName=_T(“名称”);
wc.lpszMenuName=NULL;
wc.style=CS|u VREDRAW | CS|u HREDRAW;//位形式的windows样式,如果要打印,则为0X00十六进制
if(!RegisterClass(&wc))//指向窗口的指针,如果它不存在,则调用此简单错误句柄
{
MessageBox(NULL,_T(“错误:无法注册窗口类”),_T(“错误”),MB_OK);
返回0;//终止
}
hWnd=CreateWindow(L“NAME”,//已定义为wc的对象的引用
L“窗口标题”,//标题
WS_OVERLAPPEDWINDOW,//基本窗口样式
0,//x开始,
0,//y开始,
800,
600,//将所有维度设置为默认值
NULL,//没有父窗口
NULL,//没有菜单
hInstance,
无效);
如果(!hWnd)
{
MessageBox(NULL,L“错误:无法创建窗口”,L“错误!”,MB_OK);
返回0;
}
而(1)
{
while(peek消息(&msg,NULL,0,0,PM_-NOREMOVE)){
if(GetMessage(&msg,NULL,0,0))
{
打破
}
}
发送消息(&msg);
翻译信息(&msg);
}
返回(int)msg.wParam;
}

在main.cpp中,您需要大写函数名:
int-WINAPI-WinMain
在main.cpp中,您需要大写函数名:
int-WINAPI-WinMain

您的消息循环非常奇怪。使用标准循环。为什么要写一次
\pragma
两次?在头文件中声明
hWnd
,这将导致o卷土重来困扰您。不要这样做。您将有多个实例,而这不是您想要的。您现在不想使用
tchar
。您不支持Windows 98。TranslateMessage()在DispatchMessage()之前,而不是之后。这是一段非常糟糕的代码,我不会指出所有的错误。要解决您当前的问题,请执行以下操作:在“项目设置”中,转到“常规”并选择“使用Unicode字符集”。在“链接器设置”选项卡上,选择“系统”,然后将子系统更改为“/子系统:WINDOWS”"。将你的函数名
winMain
替换为
wWinMain
。这将链接你的可执行文件。不过,它在运行时会崩溃得很厉害。谢谢,这至少让它工作起来了,我知道代码非常糟糕。这只是我为win32找到的第一个示例。强烈支持使用win32项目模板to让你行动起来。它确保你不会犯这些基本错误。此外,如果你想学习Windows编程,我建议你跳过YouTube视频并购买。你的消息循环相当奇怪。使用标准循环。为什么要写一次
#pragma
两次?在头文件中声明
hWnd
是正确的g会回来缠着你。不要这样做。你会有多个实例,这不是你想要的。你现在不想使用
tchar
。你不支持Windows 98。TranslateMessage()在DispatchMessage()之前,而不是之后。这是一段非常糟糕的代码,我不会指出所有的错误。要解决您当前的问题,请执行以下操作:在“项目设置”中,转到“常规”并选择“使用Unicode字符集”。在“链接器设置”选项卡上,选择“系统”,然后将子系统更改为“/子系统:WINDOWS”。将你的函数名
winMain
替换为
wWinMain
。这将链接你的可执行文件。不过,它在运行时会崩溃得很厉害。谢谢,这至少让它工作起来了,我知道代码非常糟糕。这只是我为win32找到的第一个示例。强烈支持使用win32项目模板t哦,让你起来走吧