调用已经存在的DLL中的函数有两种方法,动态调用(显式调用)和静态调用(隐式调用)。
对于动态调用来说,你只需要拥有这个DLL并且知道导出函数的原型即可。例如,在MyDlldll中导出了一个int Add(int a, int b);函数,实现了加法 *** 作。在你的程序中如果想调用这个Add函数的话,需要如下编码(这里认为是每一步都会成功):
typedef int (ADD)(int, int);
HMODULE hDll = LoadLibraryA("MyDlldll");
ADD Add = (ADD)GetProcAddress(hDll, "Add");
int nRes = Add(10, 25);
……
FreeLibrary(hDll);
对于静态调用,除了需要拥有那个DLL外,你还需要拥有一个和那个DLL一起发布的函数声明头文件h和一个导入库文件lib。但是使用起来相对要方便的多,编码如下:
#include "MyDllh"
#pragma comment(lib, "MyDlllib")
……
int nRes = Add(10, 25);
……
如果还有什么不懂的,可以到我的空间去留言。
路径不对,这个根目录是以你的解决方案的文件所在的目录为根目录的
比如目录为
。。
。sln
DllTest
DllTest。proj
DllTest。dll
DllTest。lib
CirCle。h
那么 #include "\\ DllTest\\circleh"
#pragma comment(lib,"\\ DllTest\\dllTestlib");
知道DLL文件内的函数名称就可以调用了,例如Declare Sub LED_Startup Lib "LEDSenderdll" ()
Declare Sub LED_Cleanup Lib "LEDSenderdll" ()
Declare Function LED_Open Lib "LEDSenderdll" (param As TDeviceParam, ByVal Notify As Long, ByVal Window As Long, ByVal Message As Long) As Long
Declare Sub LED_Close Lib "LEDSenderdll" (ByVal dev As Long)
void main(void)
{
typedef int(pMax)(int a,int b);
typedef int(pMin)(int a,int b);
HINSTANCE hDLL;
pMax Max;
pMin Min;
hDLL=LoadLibrary("mydlldll");//加载动态链接库MyDlldll文件;
Max=(pMax)GetProcAddress(hDLL,"Max");
Min=(pMin)GetProcAddress(hDLL,"Min"); int a=Max(5,8);
int b=min(10,4);
cout<<"5,8 的最大值为: "<<a<<endl;
cout<<"10,4的最小值为: "<<b<<endl;
FreeLibrary(hDLL);//卸载MyDlldll文件;
}
你得自己调显示的函数啊。你加载模块了得调相应的函数显示啊。
步骤如下:
1加载动态库(使动态库程序运行)
HMODULE LoadLibrary(
LPCTSTR lpFileName
// 动态库的名称或全路径
);//返回动态库的实例句柄(HINSTANCE)。
如果dll文件与exe文件在同一路径下,只需要写动态库名称,不在同一路径下,则需写带盘符的全路径
2
获取函数地址
FARPROC GetProcAddress(
HMODULE hModule,
// 动态库实例句柄
LPCSTR lpProcName
// 函数名称
);//执行成功,返回函数地址。
//现在才是你需要注意的地方,比如你dll中有一个show函数是显示对话框的,你就根据上面第2步传show参数得到的函数地址,通过函数指针直接调用就可以显示了。
3
卸载动态库
BOOL FreeLibrary(
HMODULE hLibModule
// 动态库实例句柄
);
declare sub Get_parameters lib "dllname" (arglist as type)
VB里的说明语句(Declare),仅支持动态链结库(DLL)的子程序和无变量函数。
VB程序要使用DLL中的函数,首先必须要有特殊的声明,用Declare声明语句在窗体级或模块级或全局模块的代码声明段进行声明,将动态链接库中的函数声明到VB中,供VB程序调用。
语句格式为:Declare Sub 过程名Lib [ Alias " 别名]([ByVal 参数AS类型]),或为Declare Function函数名Lib [Alias " 别名]([ByVal 参数AS类型])AS类型在声明中首先用Declare关键字表示声明DLL中的函数。
以上就是关于请教各位大虾如何用VC++编写程序调用动态链接库dll中的函数全部的内容,包括:请教各位大虾如何用VC++编写程序调用动态链接库dll中的函数、VC++ DLL调用、VC在没有.lib文件下怎么调用DLL等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)