C/C++ 动态链接库DLL 复杂结构体封装(VS2008)

2 篇文章 0 订阅
1 篇文章 0 订阅

1、创建Win32控制台应用程序:

本文只针对在VS2008编译环境封装动态链接库,其他版本请参见C/C++创建动态链接库(VS2019)。创建win32控制台应用程序,选择DLL,勾选空项目,创建一个空项目(不需要预编译头文件,避免调用出现预编译头文件无法打开的问题)。
在这里插入图片描述
在这里插入图片描述


2、新建DLL.h文件:

DLL.h文件用于导出函数体、结构体、变量等参数。本文主要介绍针对结构体类型函数的封装以及结构体传值过程。
其中DLL.h文件在生成DLL动态库文件后放置于Include文件中提供给使用者调用。framework.h头文件中为封装函数中所要使用到的所有头文件,特别是结构体中的参数需要定义的头文件。在生成DLL后可修改DLL.h文件,将其注释即可,或者也放入Include文件中提供给使用者。
结构体按照如下定义,在外部使用结构体时可直接使用进行传值,不需要再次定义结构体。

framework.h
#pragma once
#include "iostream"
#include "cmath"
#include "vector"
#include "string"
#include "atlstr.h"
#include "stdlib.h"

using namespace std;
DLL.h
#ifndef LIKEDLL_DLL_H
#define LIKEDLL_DLL_H

#include "framework.h"

#endif

#ifdef EXOPORTINO_DLL
#define API_TYPE extern "C" __declspec(dllexport)

#else

#define API_TYPE __declspec(dllimport)

struct INTEPSECTION_POINT
{
	int pointNo;
	CString cdID;
	vector<float> order;
	map<int, CString> materialMap;
}

API_TYPE bool LikeDLL(INTEPSECTION_POINT &Temp);

3、新建DLL.cpp文件:

建立DLL.cpp文件,将所需要用到的函数放在当前CPP中,具体格式示例如下:

#include "framework.h"
#include "DLL.h"

#define EXPORTING_DLL

bool LikeDLL(INTEPSECTION_POINT &Temp)
{
	bool flag = false;
	
	for(int i=0;i<100;i++)
	{
		int point;
		point=Temp.pointNo+i;
		Temp.order.push_back(point);
	}
	return flag;
}

4、生成DLL:

重新生成解决方案,在项目文件夹内Debug文件夹内将将生产动态库文件Dll.dll和静态链接库文件Dll.lib。新建文件夹,将对应文件放入,如下:
1、bin文件夹:存放.dll文件
2、lib文件夹:存放.lib文件
3、include文件夹:存放输出函数头文件
在这里插入图片描述

5、函数调用:

使用链接库分为静态链接和动态链接,如下:
(一)动态链接方法:
1、将Include文件夹添加到工程
解决方案>属性>C/C++>附加包含目录
2、将lib文件夹添加到工程
解决方案>属性>链接器>附加库目录
3、将lib文件添加到工程
解决方案>属性>链接器>附加依赖库
4、将dll文件拷贝到项目工程文件下
(二)静态链接方法:
1、将DLL.lib、DLL.dll和DLL.h文件拷贝到新建的项目文件内
2、在Cpp文件中使用如下代码调用静态库

#include "DLL.h"
#pragma comment (lib,"DLL.lib")
int main()
{
	INTEPSECTION_POINT Temp;
	Temp.pointNo=10;
	LikeDLL(Temp);
}
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值