VC 加载dll调用函数

VC 加载dll调用函数,第1张

加载调用DLL有两种方法:静态调用和动态调用。

(一).静态调用其步骤如下:

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11954434.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存