VC编写DLL入门实例
原创
©著作权归作者所有:来自51CTO博客作者power_harbour的原创作品,请联系作者获取转载授权,否则将追究法律责任
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;
}
下一篇:VC线程入门实例
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
如何用VC编写供PB调用的DLL (转)
x
dll subroutine library string function -
vc调用dll 示例
其实,调用dll文件的方法很多,不一定要使用LoadLibrary函数。如果使用的话,你
#include 应用程序 Windows