现在的位置: 首页 > 综合 > 正文

dll(学习笔记)

2013年02月10日 ⁄ 综合 ⁄ 共 1017字 ⁄ 字号 评论关闭

dll的基础知识

(复习一以前的知识)

Dllmain()导入函数。(仅有导出资源的Dll可以没DllMain函数)

BOOL APIENTRY DllMain( HMODULE hModule,        DWORD  ul_reason_for_call,      LPVOID lpReserved)
{
    return TRUE;
}

Dll导出函数的方式:*.def文件或_declspec(dllexport)关键字:
①*.def 文件必须至少包含下列模块定义语句:
■文件中的第一个语句必须是 LIBRARY 语句。此语句将 .def 文件标识为属于 DLL。LIBRARY 语句的后面是 DLL 的名称。链接器将此名称放到 DLL 的导入库中。

■EXPORTS 语句列出名称,可能的话还会列出 DLL 导出函数的序号值。通过在函数名的后面加上 @ 符和一个数字,给函数分配序号值。当指定序号值时,序号值的范围必须是从 1 到 N,其中 N 是 DLL 导出函数的个数。

■注释语句,在语句前面加分号 “;” 。

例如:
;DLLTest.def : Declares the module parameters for the DLL.
LIBRARY   "DLLTest"
EXPORTS
   add   @1
   fun   @2

②_declspec(dllexport) 导出方式:
为了防止名字改编,将 extern "C" _declspec(dllexport) 语句放在想要导出函数的声明前面;
例如:
extern "C" _declspec(dllexport) int add(int a, int b);
备注◆:,可以利用Depends工具(vc6.0中有)查看一下所生成的DLL,看看导出函数是否成功

dll函数导出的方法显示连接和隐式连接
隐式链接:
#pragma comment (lib,"F:\\MFC李子平\\MFCvs2008\\DLL\\DllTest\\Debug\\DllTest.lib")
_declspec (dllimport) int add(int a,int b);

显示连接:
  函数指针声明
typedef int (*DEC_FUNC) (int a, int b);

HMODULE hMod = LoadLibrary(_T("dll的绝对路径"));
if (hMod)
{
DEC_FUNC pdec = (DEC_FUNC)GetProcAddress(hMod,"dec");
if (pdec)
{
//针对导出函数的操作
}
FreeLibrary(hMod);
}
  

抱歉!评论已关闭.