静态与动态加载Dll [示例代码]

1、DLL源代码

 

MyDll.h

////////////////////////////////////////////////////////////////////////// // MyDll.h // 声明函数 int _stdcall Add(int a,int b); int _stdcall Sub(int a,int b);

 

MyDll.cpp

////////////////////////////////////////////////////////////////////////// // MyDll.pp // 声明实现 #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

; MyDll为工程名 LIBRARY MyDll ; 在这里声明需要导出的函数 EXPORTS Add Sub

 

 

2、Exe测试代码

 

演示动态与静态加载的方法,看代码吧!

void CTestDlg::OnBtnStatic() { // TODO: Add your control notification handler code here // 静态加载的方法: // 1、添加头文件 #include "MyDll.h" // 2、引入Lib库 #pragma comment(lib,"MyDll.lib") // 3、这样就可以直接使用MyDll.h中导入的函数 CString str; str.Format("静态加载: 1+1=%d 1-1=%d",Add(1,1),Sub(1,1)); MessageBox(str); } void CTestDlg::OnBtnDynamic() { // TODO: Add your control notification handler code here // 动态加载的方法: // 不需要引入头文件与lib文件,仅需要一个dll即可 // 注意这里的条约调用约定_stdcall不要忘记加(不然会引会esp出错) typedef int (_stdcall *ADDPROC)(int,int); typedef int (_stdcall *SUBPROC)(int,int); HINSTANCE handle; handle = LoadLibrary("MyDll.dll"); if(handle) { // GetProcAddress第二个参数有两种方法: // 1、通过DLL中的函数名 // 2、通过Depend工具中Ordinal索引值来查看 ADDPROC MyAdd = (ADDPROC)GetProcAddress(handle,"Add"); SUBPROC MySub = (ADDPROC)GetProcAddress(handle,MAKEINTRESOURCE(2)); if( !MyAdd ) { MessageBox("函数Add地址获取失败!"); return; } if( !MySub ) { MessageBox("函数Sub地址获取失败!"); return; } CString str; str.Format("动态加载: 1+1=%d 1-1=%d",MyAdd(1,1),MySub(1,1)); MessageBox(str); } FreeLibrary(handle); }

 

你可能感兴趣的:(测试,dll,exe,工具,library)