C语言easyX无法解析的外部命令

如图。在使用easyX的过程中遇到困难,看不懂是哪个函数在报错。
删掉pch.h不可行,但是这两个error就会消失
用的C语言,环境是VS2022

#include"pch.h"
#undef UNICODE
#undef _UNICODE
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<Windows.h>
#include<stdio.h>
#include<time.h>
#pragma warning(disable : 4996) 
#define ROW 10
#define COL 10
#define MINE 10
#define PIC_SIZE 40
int map[ROW + 2][COL + 2];
int i, j, flag;
IMAGE img[12];
void open(int r, int c);
void game();
#if _MSC_VER>=1900
#include "stdio.h"
_ACRTIMP_ALT FILE* __cdecl __acrt_iob_func(unsigned);
#ifdef __cplusplus
extern "C"
#endif
FILE * __cdecl __iob_func(unsigned i) {
    return __acrt_iob_func(i);
}
#endif /* _MSC_VER>=1900 */
void gameinit()
{
    flag = 0;
    srand((unsigned)time(NULL));
    for (i = 1; i <= ROW; i++)
    {
        for (j = 1; j <= COL; j++)
        {
            map[i][j] = 0;
        }
    }
    for (i = 0; i < MINE; )
    {
        int r = rand() % ROW + 1;
        int c = rand() % COL + 1;
        if (map[r][c] == 0)
        {
            map[r][c] = -1;
            i++;
        }
    }
    for (i = 1; i <= ROW; i++)
    {
        for (j = 1; j <= COL; j++)
        {
            if (map[i][j] == -1)
            {
                for (int m = i - 1; m <= i + 1; m++)
                {
                    for (int n = j - 1; n <= j + 1; n++)
                    {
                        if (map[m][n] != -1)
                        {
                            map[m][n]++;
                        }
                    }
                }
            }
        }
    }
    for (int i = 1; i <= ROW; i++)
    {
        for (int j = 1; j <= COL; j++)
        {
            map[i][j] += 20;
        }
    }
    char tmp[20] = { 0 };
    for (i = 0; i < 12; i++)
    {
        sprintf(tmp,"./image/%d.jpg", i);
        loadimage(&img[i], tmp, PIC_SIZE, PIC_SIZE);
    }
}
void gamedraw()
{
    for (i = 1; i <= ROW; i++)
    {
        for (j = 1; j <= COL; j++)
        {
            if (map[i][j] == -1)
            {
                putimage((j - 1) * PIC_SIZE, (i - 1) * PIC_SIZE, &img[9]);
            }
            else if (map[i][j] >= 0 && map[i][j] <= 8)
            {
                putimage((j - 1) * PIC_SIZE, (i - 1) * PIC_SIZE, &img[map[i][j]]);
            }
            else if (map[i][j] >= 19 && map[i][j] <= 28)
            {
                putimage((j - 1) * PIC_SIZE, (i - 1) * PIC_SIZE, &img[10]);
            }
            else if (map[i][j] > 30)
            {
                putimage((j - 1) * PIC_SIZE, (i - 1) * PIC_SIZE, &img[11]);
            }
        }
    }
}


int mouse()
{
    if (MouseHit())
    {
        MOUSEMSG msg = GetMouseMsg();
        int r = msg.y / PIC_SIZE + 1;
        int c = msg.x / PIC_SIZE + 1;
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (map[r][c] > 8 && map[r][c] < 29)
            {
                map[r][c] -= 20;
                flag++;
                open(r, c);
            }
            break;
        case WM_RBUTTONDOWN:
            if (map[r][c] > 8 && map[r][c] < 29)
            {
                map[r][c] += 20;
            }
            else if (map[r][c] > 30)
            {
                map[r][c] -= 20;
            }
            break;
        }
        return map[r][c];
    }
}



void open(int r, int c)
{
    if (map[r][c] == 0)
    {
        for (int m = r - 1; m <= r + 1; m++)
        {
            for (int n = c - 1; n <= c + 1; n++)
            {
                if (map[m][n] != 19 && map[m][n] > 8)
                {
                    map[m][n] -= 20;
                    flag++;
                    open(m, n);
                }
            }
        }
    }
}
void judge()
{
    gamedraw();
    if (mouse() == -1)
    {
        gamedraw();//放置图片
        int isok = MessageBox(GetHWnd(), "You lose! Do you want to play again?", "notice", MB_OKCANCEL);
        if (isok == IDOK)
        {
            game();
        }
        else
        {
            exit(666);
        }
    }
    if (flag == ROW * COL - MINE)
    {
        gamedraw();//放置图片
        int isok = MessageBox(GetHWnd(), "You win! Do you want to play again?", "notice", MB_OKCANCEL);
        if (isok == IDOK)
        {
            game();
        }
        else
        {
            exit(666);
        }
    }

}

void game()
{
    gameinit();
    while (1)
    {
        judge();
    }
}
int main()
{
    initgraph(ROW * PIC_SIZE, COL * PIC_SIZE, NULL);
    game();
    closegraph();
    return 0;
}


img

链接库加上 shell32.lib

你的报错是找不到 ExtractIconA,在msdn上搜索这个函数名,可以知道它在 shell32.dll 里,所以加上 shell32.lib

加上这个试试#pragma comment(lib, "ws2.lib")

为什么删掉pch.h不可行?
删除后,打开项目属性,C/C++,预编译头,不使用预编译头。


根据您提供的信息,如果删除了pch.h文件后仍然有错误,可以尝试以下解决方法:

确保已正确安装 EasyX 库:请检查 EasyX 库是否已正确安装在您的计算机上,并在 Visual Studio 的项目属性中指定了正确的库路径。

配置项目属性:在 Visual Studio 中,右键单击您的项目,选择“属性”。在属性对话框中,选择“C/C++-> “常规”,确保已启用预编译头(Precompiled Headers)并设置为“不使用预编译头”。

检查函数调用:查看您的代码中是否使用了 EasyX 库中的某些函数,但是没有包含相应的头文件。请确保包含了正确的头文件,以便程序能够正确解析这些函数。

检查编译选项:在 Visual Studio 中,确保您的项目正以正确的配置进行编译。例如,如果您的项目是一个控制台应用程序,则应选择“控制台应用程序”作为项目类型。

根据你提供的代码,错误提示"无法解析的外部命令"通常是由于编译器找不到相关的库文件导致的。对于使用EasyX图形库的程序,在编译时需要链接到相应的库文件。

首先,请确保你已经正确安装了EasyX图形库,并且在VS2022中设置了相关的路径。

其次,打开Visual Studio 2022,创建一个新项目。

然后,在解决方案资源管理器中,右键单击你的项目,选择“属性”。

在属性窗口中,找到“配置属性” -> “C/C++” -> “常规”,在“附加包含目录”一栏中添加EasyX图形库的头文件目录,例如:D:\EasyX\include。

接下来,在属性窗口中,找到“配置属性” -> “链接器” -> “输入”,在“附加依赖项”一栏中添加EasyX图形库的库文件(.lib)路径,例如:D:\EasyX\lib\EasyXa.lib。

点击“应用”并关闭属性窗口。

现在重新编译你的程序,看看是否还会出现同样的错误。

如果问题仍然存在,请确保你按照正确的方式安装和配置了EasyX图形库,以及正确设置了VS2022的相关属性。另外,确保你的编译器版本与EasyX图形库的版本兼容。

希望这些信息对你有所帮助!如有更多问题,请随时提问。

如果在C语言编译过程中遇到无法解析的外部命令,可能是因为相关的头文件或库文件没有正确链接,或者是因为相关的环境变量没有正确设置。下面是一些可能的解决方案:

检查头文件和库文件是否正确链接:在编译时,需要确保正确指定相关的头文件和库文件路径,例如使用编译选项“-I”指定头文件路径,使用编译选项“-L”和“-l”指定库文件路径和名称。
检查环境变量是否正确设置:在编译和链接过程中,需要确保相关的环境变量已经正确设置,例如在Windows系统中,需要将相关的DLL路径添加到系统环境变量PATH中。
检查编译器版本是否支持相关命令:有时,可能是由于使用的编译器版本不支持相关命令,需要升级到较新的版本或者使用其他编译器。
检查代码中是否存在语法错误:如果代码中存在语法错误,也可能导致无法解析外部命令的错误。
如果以上方法无法解决问题,建议查看编译器或IDE的文档或联系相关技术支持寻求帮助。

引用GPT回答: 导致这个问题的原因可能是以下几点:

  1. 缺少easyX图形库的依赖文件。请确保已经正确安装并配置了easyX图形库的运行环境。

  2. 可能存在一些编译器相关的配置问题。在使用VS2022时,由于版本更新可能会导致一些兼容性问题。你可以尝试切换到其他版本的VS(如VS2019)来看看能否解决问题。

  3. 在代码中使用了一些可能过时的函数或库。例如,loadimageputimage函数在新版本的easyX库中可能已经不适用或被替换。建议查阅easyX的官方文档,确认正确的函数使用方式。

  4. 编译器的警告。在代码开头,你使用了#pragma warning(disable : 4996)来忽略警告,但这可能掩盖了一些潜在的问题。建议逐个排查编译器给出的警告提示,保证代码的正确性。

检查头文件和库文件是否正确链接: 在编译时,需要确保正确指定相关的头文件和库文件路径例如使用编译选项“-”指定头文件路径,使用编译选项“-L”和“-”指定库文件路径和名称
检查环境变量是否正确设置:在编译和链接过程中,需要确保相关的环境变量已经正确设置,例0如在Windows系统中,需要将相关的DLL路径添加到系统环境变量PATH中。
检查编译器版本是否支持相关命令: 有时,可能是由于使用的编译器版本不支持相关命令,需要3升级到较新的版本或者使用其他编译器。
检查代码中是否存在语法错误:如果代码中存在语法错误,也可能导致无法解析外部命令的错误。
有可能是你的程序真正运行你忘记关掉了,有可能是你有个函数或者变量未定义就使用的(有可能是写错了,这个在vs里好像会有一点点提示)

基于bing、GPT部分内容和本人思考总结:
"C语言easyX无法解析的外部命令" 这个问题通常是由于编译器缺少相关的配置或文件路径错误导致的。你可以尝试以下几个步骤来解决这个问题:

确保easyX库已正确安装:首先,确保你已经正确地安装了easyX库,并将其路径配置到了编译器中。你可以在编译器的设置中检查库文件路径是否正确。

检查编译器配置:确保你的编译器已正确配置,并且能够找到easyX库文件。你可以检查编译器的环境变量设置,确保库文件路径已正确添加到了系统的搜索路径中。

检查文件路径:如果你的代码中使用了easyX库的头文件或库文件,需要确保这些文件的路径是正确的。你可以检查代码中的文件路径是否正确,或者将这些文件复制到和代码文件同一目录下。

更新编译器或库文件:如果以上步骤都没有解决问题,你可以尝试更新你的编译器或easyX库文件到最新版本。有时候,旧版本的编译器或库文件可能存在一些问题,更新到最新版本可能能够解决问题。