dll是什么文件格式,dll是什么文件怎么编辑

1. 利用MFC AppWizzed(DLL)向导界面创建一个动态链接库工程,向导中的各个选项不变.

2. 在DLL主程序文件中定义几个函数,供其他程序调用,函数的声明必须有下面的的关键字:

extern "C" TYPE PASCAL EXPORT FunName()

每个函数体的第一句话必须是:

AFX_MANAGE_STATE(AfxGetStaticModuleState());

如下例:

extern "C" int PASCAL EXPORT TestFun()

{

AFX_MANAGE_STATE(AfxGetStaticModuleState());

return 8;

}

3. 每个显式调用的动态链接库工程都必须包含一个模块定义文件,即DEF文件,在模块定义文件中必须对外部调用者说明库内函数的名称,书写格式如下:

TestFun @1

如:

; S12.def : Declares the module parameters for the DLL.

LIBRARY "S12"

DESCRIPTION 'S12 Windows Dynamic Link Library'

EXPORTS

; Explicit exports can go here

TestFun @1

如果有多个函数,则编号从@1开始,不要从@0开始.

调用:

显式调用的动态链接库必须使用LoadLibrary()函数装载,因此叫做显式调用.

1. 利MFC AppWizzed(exe)向导界面创建一个普通的project

2. 在实施调用的CPP文件的顶部定义函数指针类型,定义方法:

typedef TYPE (CALLBACK* FUNPOINTER1)(param list);

3. 在调用点声明函数指针,声明方法:

FUNPOINTER1 lpfnDllFunc1;

4. 用LoadLibrary()装载动态链接库.

5. 用GetProcAddress()装载函数,装载方法;

lpfnDllFunc1 = (FUNPOINTER1)GetProcAddress(“TestFun”);

6. 调用装载进来的函数:

lpfnDllFunc1();

如:

BOOL CTestDllApp::TestDll()

{

HINSTANCE hDll;

FUNPOINTER1 lpfnDllFunc1;

FUNPOINTER2 lpfnDllFunc2;

UINT uReturnVal;

hDll = LoadLibrary("E:\\S12.dll");//装载动态连接库

if(hDll != NULL)

{

lpfnDllFunc1 = (FUNPOINTER1)GetProcAddress(hDll,"TestFun");//装载函数

if(!lpfnDllFunc1)

{

FreeLibrary(hDll);

return FALSE;

}

else

{

int n;

n = lpfnDllFunc1();//调用函数

}

}

return TRUE;

}

本文地址:https://www.cknow.cn/archives/39905

以上内容源自互联网,由百科助手整理汇总,其目的在于收集传播生活技巧,行业技能,本网站不对其真实性、可靠性承担任何法律责任。特此声明!

如发现本站文章存在版权问题,烦请提供版权疑问、侵权链接、联系方式等信息发邮件至candieraddenipc92@gmail.com,我们将及时沟通与处理。