概述:对于一个经常写javaWeb的人来说,使用Visual Studio似乎没什么必要,但是对于使用ffi的人来说,使用c或c++编译器,似乎是必不可少的,下面我将讲述如何用Visual Studio 2022 来创建lib和dll,并使用。
静态库的创建并使用
首先打开Visual Studio 2022,点击创建新项目。
选择静态库,然后点击下一步。
点击创建。
Visual Studio 2022会自动生成以下代码:
然后打开项目属性,看一下配置是不是对的,一般来说都是对的。
看看是不是lib。
接下来就是写代码生成lib并测试一下:
1. 编写代码:
比如说,我就想编写一个输出hello World的代码,那该如何编写呢?
首先在头文件中,创建一个hello.h的文件
然后在头文件中,定义一个sayHello的方法。
#include<stdio.h>
void sayHello();
然后Hellolib.cpp在重写这个方法。
// Hellolib.cpp : 定义静态库的函数。
//
#include "pch.h"
#include "framework.h"
#include "hello.h"
// TODO: 这是一个库函数示例
void sayHello()
{
printf("Hello World");
}
点击生成,就行了。
[![](https://i-blog.csdnimg.cn/blog_migrate/ad91fb2820947c958b48884871da2779.png)](https://img2023.cnblogs.com/blog/2916233/202312/2916233-20231213091841352-1649873374.png)
生成成功:
[![](https://i-blog.csdnimg.cn/blog_migrate/b763b4909c4850dd7bd3bb0c3d78e853.png)](https://img2023.cnblogs.com/blog/2916233/202312/2916233-20231213091922296-1951391437.png)
3.如何使用:
先说一下,生成的lib的位置,就是在上一级的x64的debug文件夹里面。
在这里面新建一个空项目,用于测试lib的,我这里叫它testHello
在testHello里面新建两个文件夹,一个叫include,用来放.h的头文件的,一个叫lib,用来放lib包的。
将我们生成的那个lib放进去,还有之前定义的.h文件也放到include文件里面。
然后右击testHello,打开属性。
然后开始调整:
配置lib
一般来说,不创建源文件,它不会有c/c++编译器,那个选项
然后创建一个test.cpp的源文件。
创建源文件后,在设置一下。
配置include文件
我再说一遍,一定要先创建源文件,不然是没有c/c++的那个选项的。
然后编写相应的代码。
看这个时候,就已经出来了:
编写测试代码:
#include "hello.h"
int main() {
sayHello();
return 0;
}
然后点击运行,就会报错。
这个错误是因为在启动项目的时候,默认运行上一个项目了,我们将它改一下,就行了。
右击解决方案,点击属性。
把启动项目改一下,改成你要运行的那个项目就行了。
运行结果:
动态库的创建并使用
然后就是搞dll文件,新建一个Hellodll项目。
初始化,页面长这样。
创建头文件
#pragma once
#include"pch.h"
#ifdef MATHLIBRARY_EXPORTS
#define MATHLIBRARY_API __declspec(dllexport)
#else
#define MATHLIBRARY_API __declspec(dllimport)
#endif
extern "C" MATHLIBRARY_API void sayHello();
一样的步骤创建cpp实现
点击HelloDll项目,右击生成。
运行结果:
查看生成dll的文件
在这里面新建一个项目 testDll
然后一样的处理,在testDll里面建立一个include文件夹和lib文件夹,include文件夹里面放头文件,lib文件夹里面放dll和lib
和
然后设置一下include属性
然后设置一下dll和lib
和
然后编写代码:
#include "Hello.h"
int main()
{
sayHello();
return 0;
}
然后配置一下运行的项目。
点击运行,查看结果,会报错:
然后,把这行#include"pch.h"代码删了
然后运行,运行成功。
由于本人不是主修c++的,有问题的,还请提出来,如确实如此,本人乐意接受。