DLL学习小结
来源:互联网 发布:java calendar api 编辑:程序博客网 时间:2024/06/05 14:16
1. DllMain的函数头BOOL APIENTRY DllMain( HANDLE hModule, WORD ul_reason_for_call, LPVOID eserved )。
APIENTRY被定义为__stdcall,它意味着这个函数以标准Pascal的方式进行调用,也就是WINAPI方式;
进程中的每个DLL模块被全局唯一的32字节的HINSTANCE句柄标识,只有在特定的进程内部有效,句柄代表了DLL模块在进程虚拟空间中的起始地 址。在Win32中,HINSTANCE和HMODULE的值是相同的,这两种类型可以替换使用,这就是函数参数hModule的来历。
2.
hDll = LoadLibrary("..//Debug//dllTest.dll");
if (hDll != NULL)
{
addFun = (lpAddFun)GetProcAddress(hDll, MAKEINTRESOURCE(1));
//MAKEINTRESOURCE直接使用导出文件中的序号
if (addFun != NULL)
{
int result = addFun(2, 3);
printf("/ncall add in dll:%d", result);
}
FreeLibrary(hDll);
}
MAKEINTRESOURCE是一个通过序号获取函数名的宏.
3.
__stdcall约定
如果通过VC++编写的DLL欲被其他语言编写的程序调用,应将 函数的调用方式声明为__stdcall方式,WINAPI都采用这种方式,而C/C++缺省的调用方式却为__cdecl。__stdcall方式与 __cdecl对函数名最终生成符号的方式不同。若采用C编译方式(在C++中需将函数声明为extern "C"),__stdcall调用约定在输出函数名前面加下划线,后面加“@”符号和参数的字节数,形如_functionname@number;而 __cdecl调用约定仅在输出函数名前面加下划线,形如_functionname。
Windows编程中常见的几种函数类型声明宏都是与__stdcall和__cdecl有关的(节选自windef.h):
#define CALLBACK __stdcall //这就是传说中的回调函数
#define WINAPI __stdcall //这就是传说中的WINAPI
#define WINAPIV __cdecl
#define APIENTRY WINAPI //DllMain的入口就在这里
#define APIPRIVATE __stdcall
#define PASCAL __stdcall
动态链接库(DLL)编程深入浅出(一)
http://blog.csdn.net/noter/archive/2007/10/10/1817785.aspx
- DLL学习小结
- DLL小结
- DLL应用小结
- DLL知识小结
- dll用法及小结
- MFC扩展DLL 小结
- Dll小结-->基础部分
- 分词DLL导出小结
- vc++ DLL开发小结
- dll 使用小结
- 用Delphi制作DLL小结
- .net2003 使用 Ajax.dll 小结
- 用Delphi制作DLL小结
- VS2005 DLL制作使用小结
- 用Delphi制作DLL小结
- 用delphi制作dll小结
- php调用dll经验小结
- JNA调用DLL一点小结
- javascipt关闭窗口,并刷新父窗口
- 序——我的原创技术类文章及学习笔记
- JavaScript 14页面停留时间
- MYSQL常见问题
- Second Life 的社群观点
- DLL学习小结
- AJAX+PHP+MYSQL实现两个下拉框间的数据联动
- 目录文件备份工具
- GeoTools学习(referencing)
- HR声音:应届毕业生,我对你“非常不满”
- 基于JSON格式报文的AJAX通用实现
- JavaScript 15 自动刷新页面
- Web 2.0 的迷思与真实,其三
- 金钱关系