VC:动态链接库

MFC

一、创建DLL

1、创建MFC动态链接库,在第4部选择“Regular DLL With MFC shared linked”类型,即创建与MFC动态链接的常规DLL,可以被Win32应用程序和MFC应用程序使用。

2、添加函数。在生成的工程的test.h文件中添加语句如下:

extern "C" void _declspec(dllexport)print();

上面添加的是函数的声明语句,然后在.cpp文件中编写函数体。

extern "C" void _declspec(dllexport)print()

{

       CString str="DLL";

       AfxMessageBox(str);

}

上面的代码加入到语句:

CTestApp theApp;的后面。

3、编译、连接。在当前文件的debug文件夹下生成DLL及LIB文件。

二、使用DLL

1、新建一个基于对话框的应用程序。添加一个按钮。

2、按钮的单击响应函数:

       hdll=LoadLibrary("..\\Debug\\MFCDll.dll");//导入动态链接库

       if(hdll)

       {

              typedef void(*PROCTYPE)();

              PROCTYPE myprint=(PROCTYPE)GetProcAddress(hdll,"print");//得到函数地址

              (* myprint)();

       }

       FreeLibrary(hdll);//释放库

3、把生成的Dll文件复制到指定的目录下。

 

Win32

 

一、创建Win32 DLL

1、创建空的Win32动态链接库工程;

2、添加C++源文件。

3、在代码区编写函数fun(int a,int b);

int fun(int a,int b)

{

       int num1=a;

       int num2=b;

       int temp=0;

       if(a<b){temp=a;a=b;b=temp;}

       while(b!=0)/*利用辗除法,直到b为0为止*/

       {

              temp=a%b;

              a=b;

              b=temp;

       }

       return num1*num2/a;

}

4、添加头文件。

int fun(int a, int b);

5、添加模块定义文件(.def)。新建记事本文件,将后缀改为.def.

内容如下:

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

 

LIBRARY      "Win32Dll"

DESCRIPTION  'test Windows Dynamic Link Library'

 

EXPORTS

fun; Explicit exports can go here

6、将模块文件加入到工程。FileView面板-->右击test files-->Add File ToProject。。。

7、编译、连接。

二、使用Win32 DLL

1、将生成的DLL文件、Lib文件和test.h文件,复制到指定的目录下。并且在应用程序的.cpp文件中添加:#include "test.h"

2、隐式加载Win32 Dll文件。选择Project|Setting命令,在弹出的对话框中选择Link标签,在“Object/Library module”文本框中输入需要导入的库文件lib的文件名。注意lib的路径。

 

 动态链接库的加载

 

1、隐式连接
(1)"Project"|"Settings"命令,弹出Project Setting对话框
(2)Link-->Objects/Library modules 添加库模板路径。
(3)将DLL放到相应的路径下。
2、显示连接:
(1)调用LoadLibrary();
(2)调用GetProAddress();
(3)调用FreeLibrary();

 

动态链接库中数据和函数的导出

 

1、创建模块定义文件:*.def

内容如下:

LIBRARY filename

DESCRIPTION description content

EXPORTS

functionname

2、使用关键字_declspec(dllexport)导出函数、变量、类、类的成员

例如:利用_declspec(dllexport)导出动态链接库中的函数

int _declspec(dllexport) _cdecl functionname(int a, int b)

_declspec(dllexport)导出类的成员:

 

Class _declspec(dllexport) MyCLASS

{

}

 

posted @ 2013-03-02 23:25  慧由心生  阅读(329)  评论(0编辑  收藏  举报