DLL核心编程

      现在只要做关于dll,为了dll有更好的应用以及跨平台,一般采用自己写,不用系统的生成!不管用dll做什么事情,如一般用在大型项目软件中或为3D引擎的dll,都采用自己编,我把这段代码放出后可能很多人觉得这个太简单了,但是越是简单的东西越不简单,我记得我以前和别人就讲hello,world的c程序,我讲了五个小时还没讲完。并且这也是所有的dll的基石。弄明白它是何等的重要。

.h 文件

#ifdef JUNO_EXPORTS

首先解释下XXX_ EXPORTS宏,这个宏如果大家不用自动生成的话,会发现它是自动生成的,根据字面上的意思是导出的意思。大家也不会太去关注它了,但是我想在这里说的是这个宏在dll文件里,起着非常重要的作用。一.它会判断是外部申明,还是内部申明如果是在dll中就用export,在应用程序就用import(这个是由编译器判断),二. DLL 中的所有文件都是用命令行上定义的 xxx_EXPORTS 符号编译的。并且XXX必须与项目名一致,否则报错,原因就是此DLL 中的所有文件都是用命令行上定义的 XXX_EXPORTS符号编译的,并且与windows内部机制和编译器定义有关。

#define JUNO_API __declspec(dllexport)

这个是导出dll函数(这里是使用MFC提供的修饰符号_declspec(dllexport)),这个是外部项目的引用 (XXX _declspec(dllexport)里面的XXX可以任意定义,只需要保证这个宏修饰这个宏修饰的类/变量/函数与其对应就ok,不过从变量命名角度上看,就与系统自动生成的规范命名就好)

#else

#define JUNO_API __declspec(dllimport)

内部库的引用

#endif

JUNO_APIvoid CALLBACK DllFoo(void);

.cpp文件

hmodle是库被调用的时候,传过来的指向自己的句柄

ul_reason_for_call库被调用的原因

lp就是系统保留的一个参数

BOOL APIENTRY DllMain( HANDLE hModule,

DWORD ul_reason_for_call,

LPVOID lpReserved

)

{

switch (ul_reason_for_call)

{

case DLL_PROCESS_ATTACH:如果不是第一次调用,就不会再调用dllmain,只会曾加其次数

case DLL_THREAD_ATTACH:线程的调用,与最大的区别就是它会每一次重新掉用dllmain

case DLL_THREAD_DETACH:

case DLL_PROCESS_DETACH:在有freelib函数 或dll接触映射的时候被调用

break;

}

return TRUE;

}

JUNO_API void CALLBACK DllFoo(void)

{

MessageBox(NULL,TEXT("This function is exported from a DLL"),TEXT("DllFoo"),MB_OK);

return ;

}

其实  我为什么还要说这,因为我现在的3D引擎就是在这个代码的基础上建立起来的!也准备过段时间开源,也想准备连续讲解如何开发引擎的步骤!让中国在这个产业有更好的发展!

点赞
收藏

评论区

加载中...

相关推荐

关于我想要编写dll文件这件事

0x1前言首先我们要用C、C编写dll,肯定是需要一个合适的编写软件,什么!?你不知道什么是dll,那你这有必要去看看我得上一篇了虽然篇幅不长,但是可以让你对dll有个大致得印象,由于本人用的CLion2019的版本的,至于为什么不用VS,因为里面配置过于繁琐,很不友好,CLion安装包以及破解群文件都有,可以去下载直接使用。话不多说,进入今天

初识动态链接库(DLL)

初识DLLDLL是DynamiclinkLibrary的缩写以为动态链接库。在Windows中,许多的应用程序并不是一个完整的可执行文件,会被分成一些相对独立的动态链接库,如DLL文件,放置于系统中比如:Windows系统是许多动态链接库(DLL)组成的是Windows最基本的应用程序但我们执行运行某一个应用程序的时候,相应的DLL文件就会被程

利用CreateRemoteThread( ) 实现远程线程注入

前言首先想法是强制创建一个目标进程的线程,把我自己的恶意DLL加载进去被注入的DLL拥有目标进程内存的访问权限,所以我们可以通过该向某个进程注入DLL时的方法主要有以下三种:•创建远程线程(CreateRemoteThread()API)•使用注册表(AppInitDLLs值)•消息钩取(SetWindowsHookEx())小试牛刀目前尝试第一

WPS2010版本DLL劫持漏洞复现(plgpf.dll)

WPSOfficeplgpf.dllDLL劫持漏洞原理简单说就是exe文件寻找DLL库会优先在当前目录下寻找,若DLL库未经过校验或者寻找DLL路径不是绝对路径,容易导致DLL被本地攻击者劫持漏洞描述CVE编号:CVE20105208WPSoffice套件应用程序在加载外部库(DLL)时通过了一个不合格

干货:木马DLL实现热更新的骚批操作

以前开发木马有个需求:木马是一个DLL文件,DLL需要注入到某个进程常驻,该DLL具备自我升级能力,当发现新的可用版本时,立即Free自己,加载新的。下面是我的一个实现方案:开启一个监听线程,从网络上拉新的可用版本,下载放到一个临时目录,如果发现需要升级,则立即FreeLibrary自身,然后执行更新过程。由于FreeLibrary之后当前模块的内存区域已经

MFC DLL 导出函数的定义方式

一直在鼓捣DLL,每天的工作都是调试一个一个的DLL,往DLL里面添加自己的代码,但是对于DLL一直不太了解啊!今天一查资料,才发现自己对于DLL编写的一些基本知识也不了解。要学习,这篇文章先总结DLL的导出函数的方法。1.首先说一下如何建立一个普通的DLL工程!(以VS2008为例)NewProject  Win32标签