DLL核心编程
来源:互联网 发布:js合并数组排序 编辑:程序博客网 时间:2024/06/05 12:10
现在只要做关于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核心编程
- Windows核心编程:DLL基础
- Windows核心编程 DLL基础
- windows核心编程 DLL技术
- windows核心编程---DLL基础
- windows核心编程--DLL基本
- windows核心编程--DLL高级
- windows核心编程--DLL基本
- windows核心编程--DLL高级
- Windows核心编程:DLL高级技术
- 《windows核心编程系列》十七谈谈dll
- Windows核心编程--DLL基础--摘录
- Windows 核心编程之Dll 延时加载
- Windows 核心编程之Dll注入
- 《windows核心编程系列》十七谈谈dll
- Windows核心编程(十八)DLL基础
- Windows核心编程 第十九章 DLL基础
- Windows核心编程之DLL基础
- NDK报错:make: *** 没有规则可以创建“obj/local/armeabi/objs/a/a.o”需要的目标“/a.c”。 停止。
- JCAPS
- 黑马程序员---文件的导入导出
- win7 安装过程
- zend studio 9 字体,颜色,快捷键等相关设置
- DLL核心编程
- ios学习--UILabel学习随笔
- (莱昂氏unix源代码分析导读-9)系统初启(2)
- 如何更快打开你的网站——http请求头
- 关于服务器上tomcat获取时间少8个小时的问题
- C++虚函数表和虚函数调用机制、同名非虚函数调用机制
- php接口技术实现一个简单的多态应用实例
- Java RMI入门
- 推荐一篇文章“从半空看虚拟化”