一、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中类的使用的更多相关文章

  1. Qt编写自定义控件插件开放动态库dll使用(永久免费)

    这套控件陆陆续续完善了四年多,目前共133个控件,除了十几个控件参考网友开源的代码写的,其余全部原创,在发布之初就有打算将动态库开放出来永久免费使用,在控件比较完善的今天抽了半天时间编译了多个qt版本 ...

  2. 五,动态库(dll)的封装与使用

    在项目开发中,我们经常会使用到动态库(dll),要么是使用别人的动态库,要么是将功能函数封装为动态库给别人用.那么如何封装和使用动态库呢?以下内容为你讲解. 1.动态库的封装 以vs2010为例,我们 ...

  3. 在VS2015中用C++编写可被其它语言调用的动态库DLL

    转自:http://blog.csdn.net/songyi160/article/details/50754705 VS2015用C++创建动态库DLL步骤如下: (1)启动VS2015>文件 ...

  4. C++与C#有关对库(动态库dll,静态库.lib)文件的调用

    1 动态库的相互调用 1.1 C#调用C++ dll步骤(只能导出方法): 1. c++建立空项目->源文件文件夹中添加cpp文件和函数 2. c++属性设置中,配置类型设置为动态库dll,公共 ...

  5. Qt生成和调用动态库dll,和静态库.a(windows和linux通用)

    系统1:ThinkPad T570.Windows10.QT5.12.2(Qt Creater 4.8.2)一.动态库.dll的创建和调用1.在qtcreater中按如下步骤创建动态库,动态库名为my ...

  6. C/C++ 关于生成静态库(lib)/动态库(dll)文件如何使用(基于windows基础篇)

    1. 首先,如何制作一个静态库(lib)? 额, 对于静态库,我们知道,里头是不应该有Main函数,它只是一个配合文件.之所以称之为lib静态库,其实就是指,我们需要用到lib里头的函数时,我们才会去 ...

  7. 关于修改动态库DLL的问题

    最近在做一个小软件,需要做到新建.修改动态链接库(DLL)的功能.新建很简单,但是在修改的时候我突然发现问题来了.首先软件会在启动的时候将所有协议加载出来,然后做展示.此时你可以添加或减少动态库中的属 ...

  8. 动态库DLL加载方式-静态加载和动态加载

    静态加载: 如果你有a.dll和a.lib,两个文件都有的话可以用静态加载的方式: message函数的声明你应该知道吧,把它的声明和下面的语句写到一个头文件中 #pragma comment(lib ...

  9. C#直接使用DllImport调用C/C++动态库(dll文件)

    1.C/C++动态库的编写 下面是我编写的一个比较简单的C++dll文件用来测试,关于如何编写dll文件,我这里便不再赘述,不懂得自行查询, (1).h文件 #ifdef MYDLL_EXPORTS ...

随机推荐

  1. CenOS常用命令

    reset  作用:清屏 cd Change the shell working dirctory 切换工作目录 用法 输入cd+“空格”+“/”+“目录” 示例:cd /home 切换到home目录 ...

  2. ElasticSearch - How to search for a part of a word with ElasticSearch

    Search a part of word with ElasticSearch 来自stackoverflow https://stackoverflow.com/questions/6467067 ...

  3. Linux下apache支持PHP配置

    https://www.cnblogs.com/qiuxiao/p/6815350.html https://www.cnblogs.com/polestar/p/6086552.html

  4. Git强制更新本地库和冲突解决

    1.You have not concluded your merge. (MERGE_HEAD exists) 本地有修改和提交,如何强制用远程的库更新.出现这种情况一般是git本地有commit, ...

  5. openstack安装-计算节点-neutron服务安装

    一.安装nettron相关服务 yum install openstack-neutron-linuxbridge ebtables ipset -y 二.快速配置配置  修改红色部分为计算节点的网卡 ...

  6. BZOJ1845 [Cqoi2005] 三角形面积并 扫描线 计算几何

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1845 题意概括 给出n个三角形,求其面积并. 题解 有一个很经典的扫描线题目:矩形面积并.那个比较 ...

  7. 第三章XML简介

    概念:XML:提供数据交换.系统配置.内容管理等的功能,可跨平台.跨网络.跨程序的数据描述方式.XSL:依靠XPath定位,提供显示模板,且专门为了显示XML文件信息的语言.CSS(层叠样式表):在网 ...

  8. 【Java】 剑指offer(26) 树的子结构

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入两棵二叉树A和B,判断B是不是A的子结构. 思路 1)先对A树 ...

  9. Codeblocks 常用快捷键

    编辑部分: Ctrl + A:全选Ctrl + C:复制Ctrl + X: 剪切Ctrl + V:粘贴Ctrl + Z:撤销Ctrl + S:保存Ctrl + Y / Ctrl + Shift + Z ...

  10. 优化 --cache

    注意:配置成cache的地址段就不能再放入data and code,因为链接的时候,是不包含cache地址段的,如果想使用L1DSRAM或L1P SRAM,则应该相应减小cache段大小. 1:Ke ...