demo.cpp

来自「随着计算机信息技术的飞速发展」· C++ 代码 · 共 41 行

CPP
41
字号
#include <stdio.h> 
#include <windows.h> 
//首先定义输出函数声明,定义函数调用规范
typedef UINT (CALLBACK* MessageBoxType)(UINT ,LPCTSTR,LPCTSTR,UINT);
typedef UINT (CALLBACK* MessageBoxProxyType)(UINT ,UINT ,LPCTSTR,LPCTSTR,UINT);
void main(void) 
{ 
   BOOL freeResult, runTimeLinkSuccess = FALSE; 
   HINSTANCE dllHandle = NULL;              
   HINSTANCE dllProxyHandle = NULL;              
   MessageBoxType MessageBoxPtr = NULL;
   MessageBoxProxyType MessageBoxProxyPtr = NULL;
   //加载动态链接库,保存返回的实例句柄
   dllHandle = LoadLibrary("user32.dll");
   // 如果返回句柄有效,尝试得到函数地址
   if (NULL != dllHandle) 
   { 
	   //通过调用GetProcAddress函数得到MessageBox函数指针。
	   MessageBoxPtr = (MessageBoxType)GetProcAddress(dllHandle,
		   "MessageBoxA");
	   // 通过返回的函数地址调用API函数
	   if (runTimeLinkSuccess = (NULL != MessageBoxPtr))
	   {
		   dllProxyHandle = LoadLibrary("invoke.dll");
		   // 如果返回句柄有效,尝试得到函数地址
		   if (NULL != dllProxyHandle) 
		   {	   
			   MessageBoxProxyType MessageBoxProxyPtr = NULL;
			   MessageBoxProxyPtr= (MessageBoxProxyType)GetProcAddress(dllProxyHandle,
						"InvokeFunc");
				if (MessageBoxProxyPtr!=NULL) {
					(*MessageBoxProxyPtr)((DWORD)MessageBoxPtr,NULL,"hi","Call Successfully!",MB_OK);
				}
				FreeLibrary(dllProxyHandle);       
		   }
	   }
	   //释放加载的动态链接库
	   freeResult = FreeLibrary(dllHandle);       
   }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?