【Visual Studio+libgraphics库】用Visual Studio配置libgraphics图形库(vs2019使用libgraphics)

本文详细记录了在Visual Studio 2019中配置古老的libgraphics图形库的全过程,包括创建项目、配置文件、解决C4996、LNK2019等报错,并提供了解决方案,确保图形库在Windows环境下正确运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同步发布至:【Visual Studio+libgraphics库】用Visual Studio配置libgraphics图形库(vs2019使用libgraphics)


前言

最近在尝试用libgraphics这个图形库来进行项目的制作,但是据说这是一个非常古老的库,目前只了解到如何用DEVC++ 来配置libgraphics。但个人认为DEVC++ 编编单文件程序可以,如果文件一多还是很麻烦的,因此就想到了使用Visual Studio尝试一下配置libgraphics项目。


一、极简版(荐)

极简版将快速完成项目的配置,忽略了中间冗杂的找问题以及解决问题过程

说明

我是从完整版开始写的,心态写崩了,从完整版开始看吧
(懒得整理了


二、完整版

完整版将从头开始一步一步来,逐个解决报错,完成项目配置


1.创建空项目

①.打开Visual Studio
打开Visual Studio
②创建新项目->空项目->配置新项目
创建新项目
在这里插入图片描述
在这里插入图片描述


2.配置项目文件

①将libgraphics库( “lib” 文件夹和 “libgraphics” 文件夹)移动至工作区内
库文件
②在Visual Studio内配置库

在这里插入图片描述
点击 “显示所有文件” 后会出现刚才导入的两个文件夹

在这里插入图片描述
在解决方案管理器内展开文件夹全选文件之后右键选择 “包括在项目中”

在这里插入图片描述
在项目上右键,添加->新建项
在这里插入图片描述
然后修改文件名(此处以"main.c"为文件名,可以修改,但是一定要注意的是必须为c语言文件,即以".c"结尾

在这里插入图片描述


3.配置项目属性

在这里插入图片描述
在这里插入图片描述
修改完之后进入 VC++目录->包含目录->编辑 添加库引用

在这里插入图片描述
在这里插入图片描述
最后应用修改
在这里插入图片描述


4.编写样例程序

刚开始我觉得非常简单,我认为和在DEVC++中配置是大同小异的,但是实际并非如此!!!
解决了一个报错又出来有一个报错,因此我经历了非常痛苦的配置过程,网上的相关解决方案有相当的少。
因此我觉得有必要写一篇记录一下!
首先,先给出测试libgraphics图形库基本功能的代码。
代码如下:

/*
 * File: main.c
 * -------------
 * This program verify the basic function of libgraphics
 */

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include "graphics.h"
#include "genlib.h"
#include "conio.h"
#include <windows.h>
#include <olectl.h>
#include <stdio.h>
#include <mmsystem.h>
#include <wingdi.h>
#include <ole2.h>
#include <ocidl.h>
#include <winuser.h>

/*function*/
void DrawBox(double x, double y, double width, double height);
void DrawTriangle(double x, double y, double base, double height);
void DrawCenteredCircle(double x, double y, double r);

void Main() {
	InitGraphics();
	double cx, cy;
	cx = GetWindowWidth() / 2;
	cy = GetWindowHeight() / 2;
	SetWindowTitle("Test");
	SetPenColor("Blue");
	DrawBox(cx, cy, 2.0, 3.0);
	SetPenColor("Red");
	DrawCenteredCircle(cx, cy, 1.0);
	SetPenColor("Orange");
	DrawTriangle(cx, cy, 2.0, 1.7);
	MovePen(cx, cy);
	DrawTextString("Hello!!!");
}

void DrawBox(double x, double y, double width, double height) {
	MovePen(x, y);
	DrawLine(0, height);
	DrawLine(width, 0);
	DrawLine(0, -height);
	DrawLine(-width, 0);
}

void DrawTriangle(double x, double y, double base, double height) {
	MovePen(x, y);
	DrawLine(base, 0);
	DrawLine(-base / 2, height);
	DrawLine(-base / 2, -height);
}

void DrawCenteredCircle(double x, double y, double r) {
	MovePen(x + r, y);
	DrawArc(r, 0, 360);
}

我们先不妨试着运行一下(一定是运行不了的!
在这里插入图片描述
好,接下来让我们逐个解决问题


5.解决各种报错

①C4996:"This function or variable may be unsafe"报错

报错截图:

在这里插入图片描述

错误 C4996 ‘sprintf’: This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. LibGraphicsTest

报错原因:

上网查询资料之后,原因是目前Visual Studio使用了更加安全的 run-time library routines
因此这类函数要么改写为带"_s"的新形式,要么忽略这个报错。

解决方案:

①将所有这类函数替换为带"_s"的更安全的形式(不推荐,感觉有好多,挺麻烦的)
②在头部添加宏定义:#define _CRT_SECURE_NO_DEPRECATE不推荐,需要在每个文件中添加宏定义,挺麻烦的)
③在项目属性中忽略此类报错(推荐,具体方法如下)
在这里插入图片描述
单击项目右键进入属性页,进入 “ C/C++ -> 预处理器 -> 预处理器定义 ”

在这里插入图片描述
在预处理器定义中添加_CRT_SECURE_NO_WARNINGS,然后点击 “确定”->“应用”


②LNK2019:无法解析的外部符号"main" 报错

报错截图:

在这里插入图片描述

错误 LNK2019 无法解析的外部符号 main,函数 “int __cdecl invoke_main(void)” (?invoke_main@@YAHXZ) 中引用了该符号 LibGraphicsTest

报错原因:

在使用libgraphics图形库编程时,我们要写的图形化界面
而项目默认的是控制台程序(console)
因此我们要将项目的属性从控制台程序修改图形化界面的窗口程序

解决方案:

在这里插入图片描述
单击项目右键进入属性页,进入 “ C/C++ -> 预处理器 -> 预处理器定义 ”

在这里插入图片描述
_CONSOLE改为_WINDOWS

在这里插入图片描述
进入 “ 链接器 -> 子系统 ”,将控制台(/SUBSYSTEM:CONSOLE)改为窗口(/SUBSYSTEM:WINDOWS)
然后点击右下角 “应用” 应用修改,至此,此问题得到了解决


③LNK2005:“RaiseException已经在exceptio.obj中定义” 报错

报错截图:

在这里插入图片描述

错误 LNK2005 RaiseException 已经在 exceptio.obj 中定义 LibGraphicsTest

报错原因:

libgraphics库中的RaiseException函数与kernel32.lib中的RaiseException冲突了,因此报错

解决方案:

可以对整个项目中的RaiseException进行替换,我是将所有的RaiseException替换为RaiseException_
CTRL+H快捷键打开替换,将所有的RaiseException替换为RaiseException_(也可以换成其他的名字)

在这里插入图片描述


接下来程序一般来说是可以运行了,但是尚且不能正常运行!因为运行时又出现了异常情况

④已引发异常:Run-Time Check Failure #2 - Stack around the variable ‘title’ was corrupted.报错

报错截图:

在这里插入图片描述

Run-Time Check Failure #2 - Stack around the variable ‘title’ was corrupted.

报错原因:

经过一番痛苦的调试,我发现是MaxTitle开小了,只有75,把MaxTitle宏定义的数值调大就可以了.

解决方案:

打开graphics.c文件,到第52行处将MaxTitle宏定义的数值调整为1000即可

在这里插入图片描述


解决完这个问题之后,程序就可以运行了,窗口中也会出现图形。
但是你可能会发现,这时候原本该显示的文字显示是乱码,窗口的标题也是乱码显示。
那么这该怎么办呢?

⑤最后的问题:文字显示乱码

错误截图:

在这里插入图片描述

错误原因:

项目的字符集设定不对

解决方案:

进入 “ 高级 -> 字符集 ”,将使用Unicode字符集改为使用多字节字符集

在这里插入图片描述

大功告成了!!!!!

终于修好了
在这里插入图片描述

希望各位码的愉快!!!如果遇到什么问题可以评论

!!!!!!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值