提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
VS生成DLL工程,并调用
提示:以下是本篇文章正文内容,下面案例可供参考
一、dll工程
1、dll(动态链接库),把已有的VS工程打包成DLL,供第三方使用,只需要在VS工程中保留接口函数。工程参数配置:属性-》配置属性-》配置类型选择动态库dll,然后回到主页,选择重新生成解决方案。
这时候一般工程都已经在debug/release文件中生成.dll和lib,有些没有找到dll,只有一个.exe,怎么也生成不了dll,这种情况需要选择属性-》链接器-》输出文件:输入$(OutDir)$(TargetName)$(TargetExt),有些工程默认输出.exe,恶心到了。
2、VS工程配置
上述把DLL生成环境配好,DLL还不能使用,需要新建.def文件,操作添加-》新建项-》代码-》模块定义文件(.def),默认名字就好。
.def文件设置dll调用函数,接口函数在其他.c文件内编写,def只配置输出接口。
LIBRARY "convbin.dll"
EXPORTS
rtklib_convin1
con_add1
con_add2
如果不适用def方式,可以选择建立.h文件。如下图建立了三个接口函数,这三个函数也是在其他.c内编写。
#pragma once
__declspec(dllexport) int rtklib_convin1(char firm_name[], char time[]);
__declspec(dllexport) int con_add1(int a, int b);
__declspec(dllexport) int con_add2(int a, int b);
3、输出
完成了环境和接口的配置,点击生成-》重新生成解决方案,只有定义了接口的函数,其他工程才能调用。
二、调用DLL
1.新建一个工程
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarnings('ignore') import ssl ssl._create_default_https_context = ssl._create_unverified_context
2.复制之前在生成DLL工程内debug/release文件中的.DLL和.LIB到新工程目录下。
3、在新工程内资源文件中把dll和lib包含进去。
4、代码
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
//#pragma comment(lib,"Project1.lib")
#pragma comment(lib,"Project3.lib")
#pragma comment(lib,"convbin.lib")
__declspec(dllexport) void add_main();
//int add1(int a, int b);
extern "C" __declspec(dllexport) int rtklib_convin1(char firm_name[], char time[]);
extern "C" __declspec(dllexport) int con_add1(int a, int b);
extern "C" __declspec(dllexport) int con_add2(int a, int b);
// 静态调用DLL库
int main()
{
char time[20] = "2020_12_28-9-0-0";
char a[100] = "ReceivedTofile1-TCPCLIENT-2020_12_28_9-0-0.DAT";
add_main();
int sum = con_add2(6, 20);
rtklib_convin1(a, time);
printf("静态调用,sum = %d\n", sum);
return 0;
}