(一).静态调用其步骤如下:
1.把你的youApp.DLL拷到你目标工程(需调用youApp.DLL的工程)的Debug目录下
2.把你的youApp.lib拷到你目标工程(需调用youApp.DLL的工程)目录下
3.把你的youApp.h(包含输出函数的定义)拷到你目标工程(需调用youApp.DLL的工程)目录下
4.打开你的目标工程选中工程,选择Visual C++的Project主菜单的Settings菜单
5.执行第4步后,VC将会d出一个对话框,在对话框的多页显示控件中选择Link页。然后在Object/library modules输入框中输入:youApp.lib。
6.选择你的目标工程Head Files加入:youApp.h文件
7.最后在你目标工程(*.cpp,需要调用DLL中的函数)中包含你的:#include "youApp.h"
注:youApp是你DLL的工程名。
(二).动态调用其程序如下:
动态调用时只需做静态调用步骤1.
{
HINSTANCE hDllInst = LoadLibrary("youApp.DLL")
if(hDllInst)
{
typedef DWORD (WINAPI *MYFUNC)(DWORD,DWORD)
MYFUNC youFuntionNameAlias = NULL// youFuntionNameAlias 函数别名
youFuntionNameAlias = (MYFUNC)GetProcAddress
(hDllInst,"youFuntionName")
// youFuntionName 在DLL中声明的函数名
if(youFuntionNameAlias)
{
youFuntionNameAlias(param1,param2)
}
FreeLibrary(hDllInst)
}
}
1、创建dll:在.cpp头部加上如下语句:#define DLLEXPORT __declspec(dllexport)
2、实现函数:DLLEXPORT int Add(int first,int second)
{ return (first+second)}
3、 使用Dll:在要使用该dll中函数的头文件中加入:
#define DLLIMPORT __declspec(dllimport)
#pragma comment(lib,"cal.lib")
DLLIMPORT int Add(int first,int second)
4、 如果使用了新建头文件,则包含该头文件再引用dll中的函数。
二、导出class的DLL
1、 在要导出的dll中,右键点击ClassView的根目录->New Class->Generic,添加一新类CRectArea
2、 在新添加类头文件中加入:#define DLLEXPORT __declspec(dllexport)
3、 在类前加入DLLEXPORT:class DLLEXPORT CRectArea{…}
4、 加入实现函数
5、 在.exe中,在要调用dll中函数的类前加入#define DLLIMPORT __declspec(dllimport)、#pragma comment(lib,”Calc.lib”)及#include “RectArea.h”
6、 将RectArea.h 及.dll、.lib copy到当前.exe目录下,将.h添加到工程中
7、 在头文件中声明变量:CRectArea m_RectArea
8、 调用Dll中类的函数
三、通过.DEF文件创建Dll
1、在Dll的CXXXApp头文件中添加函数声明:int Mul(int,int)double Div(double,double)
2、在.cpp中实现之:int Mul(int a,int b) { return a*b}
double Div(double a,double b) { return a/b}
3、找到.DEF文件并打开,EXPORTS
Explicit exports can go here
Mul @1 (新加行)
Div @2 (新加行)
4、在调用的头文件中加入:typedef int (CALLBACK *LPMUL)(int,int)及 typedef double (CALLBACK *LPDIV)(double,double)
5、 在调用文件中加入代码: UpdateData(TRUE)
HINSTANCE hInst = LoadLibrary("Cal.dll")
LPNUM lpNum
lpNum = (LPNUM)GetProcAddress(hInst,"Mul")
m_c = lpNum(m_a,m_b)
UpdateData(FALSE)
FreeLibrary(hInst)及(因为有两个函数Mul&Div)
UpdateData(TRUE)
HINSTANCE hInst = LoadLibrary("Cal.dll")
LPFNUM lpfNum
lpfNum = (LPFNUM)GetProcAddress(hInst,"Div")
m_last = lpfNum(m_first,m_second)
UpdateData(FALSE)
FreeLibrary(hInst)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shg104/archive/2006/07/04/875592.aspx
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)