15,471
社区成员
发帖
与我相关
我的任务
分享
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);
}
HINSTANCE h;
int *fun;
h = LoadLibrary("ycode.dll");
if(h!=NULL)
{
fun =(int *)GetProcAddress(h,"loadcode");
}