Dll的简单开发和被调用

来源:互联网 发布:人民大学网络教育官网 编辑:程序博客网 时间:2024/06/17 11:23

 开发步骤如下:

 <1> : 利用VC6.0开发出一个范例:

extern "C" _declspec(dllexport) int __stdcall substract(int a,int b){
 return a-b;
}
extern "C" _declspec(dllexport) int __stdcall add(int a,int b){
 return a+b;
}

并且配置def文档:

LIBRARY dlo.dll
EXPORTS
add @1
substract @2

编译得到dll文件,同时还要注意个lib文件.

<2> : 在MFC中调用:

1:新建一个MFC的dialog工程,并且在工程设置的link的Object/library modules 中将上面生成的lib文件添加进去!

2:添加俩个个按钮;

3:按钮点击事件程序如下写:

extern int add(int a,int b);//引入外部函数的声明
void CDlltextDlg::OnAdd()
{
 // TODO: Add your control notification handler code here
 CString str;
 str.Format("5+3=%d",add(5,3));
 MessageBox(str);
}
extern int substract(int a,int b);
void CDlltextDlg::OnAbstracte()
{
 // TODO: Add your control notification handler code here
 CString str;
 str.Format("5-3=%d",substract(5,3));
 MessageBox(str);
}

4:点击按钮进行测试,既可以得到结果!

<3> :在C++应用程序中调用:

1:新建一个C++项目,并且在工程设置的link的Object/library modules中添加lib文件,与其他的lib文件用单空格隔开!

2 :写一段程序测试:

#include<iostream>

using namespace std;

extern int add(int a,int b);

void main(){
 
 int a,b;
 a=4;
 b=6;
 cout<<add(a,b)<<endl;

}

编译运行上面的程序即可得到结果!

<5> :动态导入dll到程序中:

1:MFC程序中:

//extern int add(int a,int b);
void CDlltextDlg::OnAdd()
{
 // TODO: Add your control notification handler code here

 HINSTANCE hInst;
 hInst=LoadLibrary("dlo.dll");
 typedef int (_stdcall *ADDPROC)(int a,int b);
 ADDPROC Add=(ADDPROC)GetProcAddress(hInst,"add");
 if(!Add){
  MessageBox("load library fail !");
  return;
 }

 CString str;
 str.Format("5+3=%d",Add(5,3));
 MessageBox(str);
}
//extern int substract(int a,int b);
void CDlltextDlg::OnAbstracte()
{
 // TODO: Add your control notification handler code here
 HINSTANCE hInst;
 hInst=LoadLibrary("dlo.dll");
 typedef int (_stdcall *ADDPROC)(int a,int b);
 ADDPROC Substract=(ADDPROC)GetProcAddress(hInst,"substract");
 if(!Substract){
  MessageBox("load library fail !");
  return;
 }

 CString str;
 str.Format("5-3=%d",Substract(5,3));
 MessageBox(str);
}

<2> : C++应用程序动态加载动态链接库:

#include<iostream>
#include<windows.h>
using namespace std;

//extern int add(int a,int b);

void main(){
 
 int a,b;

 HINSTANCE hInst;
 hInst=LoadLibrary("dlo.dll");
 typedef int (_stdcall *ADDPROC)(int a,int b);
 ADDPROC Add=(ADDPROC)GetProcAddress(hInst,"add");
 if(!Add){
  return;
 }

 a=4;
 b=6;
 cout<<Add(a,b)<<endl;
}

<3> : VB语言调用动态链接库:

1:将上面开发的dll文件放到系统system32文件夹下;

2 : 下面以调用add函数为例 :

函数声明 :

Public Declare Function add Lib "dlo.dll" Alias "#1" (ByVal num1 As Integer, ByVal num2 As Integer) As Integer

在VC++中形参变量的数据类型为int,在vb中可能不是integer,也可能为long型(没有得到证实,因为我仔细看了)

3 : 新建一个VB工程,在form中添加一个按钮,进入code编辑状态,将上面的函数声明写入;

4 : 编写按钮点击事件:

Private Sub Command1_Click()
    MsgBox "" & add(6, 4)
End Sub

5:运行程序,既可以得到预定的结果.

 

 

原创粉丝点击