动态加载dll需要做的事情,动态加载dll错误
1、动态链接库源代码
MyDll.h
【cpp】查看plaincopyprint?///////////////////////////////////////,h//mydll声明函数int _stdcall Add(int a,int b);int _stdcall Sub(int a,int b);
MyDll.cpp
【cpp】查看plaincopyprint?///////////////////////////////////////,PP//mydll声明实现# include mydll。h int _ stdcall Add(int a,int b){ return a b;} int _stdcall Sub(int a,int b){ return a-b;}
MyDll.def
【cpp】查看plaincopyprint?文件为工程名库文件在这里声明需要导出的函数导出添加子
2、Exe测试代码
演示动态与静态加载的方法,看代码吧!
【cpp】查看plaincopyprint?void CTestDlg:OnBtnStatic(){//TODO:在此添加您的控件通知处理程序代码//静态加载的方法: //1、添加头文件#include MyDll.h //2,引入解放运动库# pragma注释(lib, mydll。lib )//3,这样就可以直接使用MyDll.h中导入的函数CString字符串;海峡。格式(静态加载:1 1=%d 1-1=%d ,Add(1,1),Sub(1,1));MessageBox(str);} void CTestDlg:onbtn dynamic(){//TODO:在此添加您的控件通知处理程序代码//动态加载的方法: //不需要引入头文件与解放运动文件,仅需要一个动态链接库即可//注意这里的条约调用约定_stdcall不要忘记加(不然会引会超感官知觉出错)typedef int(_ stdcall * add proc)(int,int);typedef int(_ stdcall * SUBPROC)(int,int);h实例句柄;handle=LoadLibrary( mydll。dll’);if(handle) { //GetProcAddress第二个参数有两种方法: //1、通过动态链接库中的函数名//2、通过依赖工具中序数索引值来查看Add proc MyAdd=(Add proc)GetProcAddress(handle, Add );sub proc my sub=(add proc)GetProcAddress(handle,MAKEINTRESOURCE(2));如果(!MyAdd ) { MessageBox(函数增加地址获取失败!);返回;}如果(!MySub ) { MessageBox(函数潜水艇地址获取失败!);返回;} CString字符串海峡。格式(动态加载:1 1=%d 1-1=%d ,MyAdd(1,1),MySub(1,1));MessageBox(str);}免费图书馆(句柄);}