动态库DLL中类的使用
一、DLL中类的导出
在类名称前添加 _declspec(dllexport)定义,比如:
class _declspec(dllexport) CMath{
....
};
通常使用预编译开关切换类的导入导出定义,比如:
#ifdef DLLCLASS_EXPORTS
#define EXT_CLASS _declspec(dllexport)
//DLL
#else
#define EXT_CLASS _declspec(dllimport)
//使用者
#endif
class EXT_CLASS CMath{
...........
};
二、使用DLL中的类
1、导入DLL的lib
2、类的定义
3、使用类
样例代码例如以下:
DLL类源代码
.h文件
#ifndef _DLL_CLASS_
#define _DLL_CLASS_ //定义导入。导出宏开关.
#ifdef DLLCLASS_EXPORT
#define EXT_CLASS _declspec(dllexport)
#else
#define EXT_CLASS _declspec(dllimport)
#endif class EXT_CLASS CMath
{
public:
int Add(int num1,int num2);
int Sub(int num1,int num2);
}; #endif
.cpp文件
#define DLLCLASS_EXPORT #include "DllClass.h"
#include <WINDOWS.H>
#include <CSTDIO> BOOL CALLBACK DllMain(HINSTANCE hInst,DWORD fDwReason,VOID* Reserve)
{
switch(fDwReason)
{
case DLL_PROCESS_ATTACH:
{
//初始化工作.
printf(__TEXT("DllClass is loading.\r\n"));
}
break;
case DLL_PROCESS_DETACH:
{
//善后处理工作.
printf(__TEXT("DllClass is unloading.\r\n"));
}
break;
case DLL_THREAD_ATTACH:
{ }
break;
case DLL_THREAD_DETACH:
{ }
break;
} return 1;
} int CMath::Add(int num1,int num2)
{
return num1+num2;
} int CMath::Sub(int num1,int num2)
{
return num1-num2;
}
我们看到上面的DLL类中包括了DllMain(...)函数,这个函数为DLL动态库的程序入口。
入口程序不是DLL必须的,经常使用于DLL内部初始化或善后处理。
BOOL WINAPI DllMain(
HINSTANCE hinstDLL,
//动态库实例句柄
DWORD
fdwReason, //初调用原因
LPVOID
lpvReserved //保留值
); 返回TRUE,表示动态库载入成功。
DllMain(.... ) 动态库的载入或卸载时会被调用。
比如:使用LoadLibrary或FreeLibrary时会被调用。
fdwReason取值例如以下:
#define DLL_PROCESS_ATTACH 1 //进程载入
#define DLL_THREAD_ATTACH 2 //线程载入
#define DLL_THREAD_DETACH 3 //线程卸载
#define DLL_PROCESS_DETACH 0 //进程卸载
动态库DLL中类的使用的更多相关文章
- Qt编写自定义控件插件开放动态库dll使用(永久免费)
这套控件陆陆续续完善了四年多,目前共133个控件,除了十几个控件参考网友开源的代码写的,其余全部原创,在发布之初就有打算将动态库开放出来永久免费使用,在控件比较完善的今天抽了半天时间编译了多个qt版本 ...
- 五,动态库(dll)的封装与使用
在项目开发中,我们经常会使用到动态库(dll),要么是使用别人的动态库,要么是将功能函数封装为动态库给别人用.那么如何封装和使用动态库呢?以下内容为你讲解. 1.动态库的封装 以vs2010为例,我们 ...
- 在VS2015中用C++编写可被其它语言调用的动态库DLL
转自:http://blog.csdn.net/songyi160/article/details/50754705 VS2015用C++创建动态库DLL步骤如下: (1)启动VS2015>文件 ...
- C++与C#有关对库(动态库dll,静态库.lib)文件的调用
1 动态库的相互调用 1.1 C#调用C++ dll步骤(只能导出方法): 1. c++建立空项目->源文件文件夹中添加cpp文件和函数 2. c++属性设置中,配置类型设置为动态库dll,公共 ...
- Qt生成和调用动态库dll,和静态库.a(windows和linux通用)
系统1:ThinkPad T570.Windows10.QT5.12.2(Qt Creater 4.8.2)一.动态库.dll的创建和调用1.在qtcreater中按如下步骤创建动态库,动态库名为my ...
- C/C++ 关于生成静态库(lib)/动态库(dll)文件如何使用(基于windows基础篇)
1. 首先,如何制作一个静态库(lib)? 额, 对于静态库,我们知道,里头是不应该有Main函数,它只是一个配合文件.之所以称之为lib静态库,其实就是指,我们需要用到lib里头的函数时,我们才会去 ...
- 关于修改动态库DLL的问题
最近在做一个小软件,需要做到新建.修改动态链接库(DLL)的功能.新建很简单,但是在修改的时候我突然发现问题来了.首先软件会在启动的时候将所有协议加载出来,然后做展示.此时你可以添加或减少动态库中的属 ...
- 动态库DLL加载方式-静态加载和动态加载
静态加载: 如果你有a.dll和a.lib,两个文件都有的话可以用静态加载的方式: message函数的声明你应该知道吧,把它的声明和下面的语句写到一个头文件中 #pragma comment(lib ...
- C#直接使用DllImport调用C/C++动态库(dll文件)
1.C/C++动态库的编写 下面是我编写的一个比较简单的C++dll文件用来测试,关于如何编写dll文件,我这里便不再赘述,不懂得自行查询, (1).h文件 #ifdef MYDLL_EXPORTS ...
随机推荐
- python接口自动化测试三:代码发送HTTP请求
get请求: 1.get请求(无参数): 2.get请求(带参数): 接口地址:http://japi.juhe.cn/qqevaluate/qq 返回格式:json 请求方式:get post 请求 ...
- DOM事件监听器
DOM事件监听器,允许一个事件触发多个方法.在实际工作中应用比较多. 它的调用形式如下: <body> <div> DOM事件监听器,允许一个事件触发多个方法. </di ...
- 7za的压缩与解压
2.1 解压缩7z文件 7za x phpMyAdmin-3.3.8.1-all-languages.7z -r -o./ 参数含义: x 代表解压缩文件,并且是按原始目录树解压(还有个参数 e 也 ...
- Java Timer, TimerTask, Timer.Schedule
schedule的意思(时间表.进度表) timer.schedule(new TimerTask(){ void run()},0, 60*60*1000);timer.schedule(new M ...
- 【AtCoder】ARC082
C - Together 用一个数组记一下一个数给它本身,左右贡献都是1,看看哪个数的总贡献最大 #include <bits/stdc++.h> #define fi first #de ...
- python全栈开发day33-进程间的通信、进程间的数据共享,进程池
一.昨日内容回顾: 1. 守护进程 1).p.saemon, 2 ).p.terminate 3 ).p.join 2. 同步控制 1).锁,Lock 互斥锁,解决数据安全.进程之间资源抢占问题. ...
- ERROR 2003:Can't connect to MySQL server on 'localhost'
mysql出现10061错误解决办法 如果出现"ERROR 2003: Can't connect to MySQL server on 'localhost' (10061)", ...
- BZOJ4990 [Usaco2017 Feb]Why Did the Cow Cross the Road II 动态规划 树状数组
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4990 题意概括 有上下两行长度为 n 的数字序列 A 和序列 B,都是 1 到 n 的排列,若 a ...
- Selenium 获取文本信息方法+select(定位)
1.通过先定位到具体的元素然后通过text方法获取文本信息,如获取控件名称等 driver.find_element_by_xpath("//div[/h1").text 2.直接 ...
- Python3 卷积神经网络卷积层,池化层,全连接层前馈实现
# -*- coding: utf-8 -*- """ Created on Sun Mar 4 09:21:41 2018 @author: markli " ...