DLL系列---关于DLL本身的一些其他相关
来源:互联网 发布:卖家数据 编辑:程序博客网 时间:2024/06/09 07:26
DLL系列---关于DLL本身的一些其他相关
一.关于导出函数和变量的另一种写法
在前面的dll中对于导出的函数和数据我们是在函数或变量的声明前添加_declspec(dllimport)实现导出的目的,但是当使用其他编译器来实现我们的执行文件来调用我们在VS平台上生成的dll时会遇到链接错误的问题,主要问题是VS在导出符号或则变量的时候会给函数名加上特殊的后缀如_@8。为得到未经过改变的函数名,我们必须使用其他方法导出我们的函数和变量。
1.使用def文件的方法导出
<span style="font-family:Microsoft YaHei;font-size:14px;">; MyLib.def : Declares the module parameters for the DLL.LIBRARY "MyLib"SECTIONSshareddata READ WRITE SHAREDEXPORTSg_nResultAdd</span>
上面是我们前一节中的MyLib链接库中的def文件
2.直接在dll源文件中加入一行声明
<span style="font-family:Microsoft YaHei;font-size:14px;">#pragma comment(link,"/export:Add=_Add@8");</span>
二.DLL的入口点函数
DllMain函数的一般写法
<span style="font-family:Microsoft YaHei;font-size:14px;">BOOL APIENTRY DllMain(HANDLEhModule, DWORD ul_reason_for_call, LPVOIDlpReserved){printf("hModule.%p lpReserved.%p \n", hModule,lpReserved);switch (ul_reason_for_call){case DLL_PROCESS_ATTACH://一般Dll第一次被映射到进程地址空间的时候被调用printf("Process attach. \n");break;case DLL_PROCESS_DETACH://当Dll被从地址空间被撤销的时候调用printf("Process detach. \n");break;case DLL_THREAD_ATTACH:printf("Thread attach. \n");break;case DLL_THREAD_DETACH:printf("Thread detach. \n");break;}return (TRUE);}</span>DLL使用DllMain函数主要是来对自己的初始化操作,所以dll中不是都存在DllMain函数。
三.模块的基地址重定位
每个dll模块都有一个首选基地址,一般为0x00400000,但当一个进程需要调用多个dll时默认的dll首选基地址会冲突,为了增加程序执行效率我们可以使用Rebase工具来为每个模块设置首选基地址。
0 0
- DLL系列---关于DLL本身的一些其他相关
- 关于DLL的一些摘录
- 关于dll的一些知识
- 关于dll的一些事
- 关于dll的一些事
- 关于DLL的一些尝试
- 关于win32 dll 的相关知识总结
- 关于vc下dll的相关知识
- 关于动态调用dll的一些见识
- 关于编写DLL的一些问题
- 关于jnative调用dll的一些心得
- DLL系列---关于Dll注入概论
- 关于用c生成的dll在使用其他供应商的工具创建可执行模块时遇到的一些问题
- 解决关于DLL一些疑惑
- dll的一些知识
- dll的一些细节
- 一些DLL的运行机制
- dll的一些常识
- Could not load file or assembly ‘Microsoft.VisualStudio.Tools.Applications.Core’
- android应用多线程守护
- print spooler 1068 依赖服务或组无法启动
- resin服务 java web.xml中的配置
- iOS CALayer和3D (1): 定义一个简单的旋转3D立方体
- DLL系列---关于DLL本身的一些其他相关
- 计数排序
- java中HashMap详解
- 源代码笔记——container_of
- Android开发之ImageView ScaleType属性
- 【PHP】php常用函数一览
- Oracle在线重定义-分区整理(bat执行)
- Unity3D研究院transform.parent = parent坐标就乱了
- MVC 5 Ajax + bootstrap+ handle bar 例: 实现service 状态