21.5 windows_21_Library_use_DLL_Invoke 动态库补充5

  1. // windows_21_Library_use_DLL_Invoke.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include <windows.h>
  5. //2.2.2 定义函数指针,在开发工程中,一般都是大写
  6. typedef int( *DLL_ADD )( int nAdd1, int nAdd2 );
  7. typedef int( *DLL_SUB )( int nSub1, int nSub2 );
  8. typedef int( *DLL_MUL )( int nMul1, int nMul2 );
  9. void UseDll( )
  10. {
  11. //2.2.1 加载动态库,使用LoadLibrary,HMODULE = HINSTANCE
  12. HMODULE hDll = (HMODULE)LoadLibrary( "windows_21_Library_DLL_test.dll" );
  13. if (hDll == NULL)
  14. {
  15. printf( "Load Failed\n" );
  16. return;
  17. }
  18. printf( "hDll handle: %p\n", hDll );
  19. //2.2.2 定义函数指针变量
  20. DLL_ADD Dll_Add = NULL;
  21. DLL_SUB Dll_Sub = NULL;
  22. DLL_MUL Dll_Mul = NULL;
  23. //2.2.3 获取函数地址 GetProcAddress
  24. Dll_Add = (DLL_ADD)GetProcAddress( hDll, "Dll_Add" ); //取得Dll_Add函数地址转换成DLL_ADD类型
  25. printf( "Dll_Add handle: %p\n", Dll_Add );
  26. Dll_Sub = (DLL_SUB)GetProcAddress( hDll, "Dll_Sub" );
  27. printf( "Dll_Sub handle: %p\n", Dll_Sub );
  28. Dll_Mul = (DLL_MUL)GetProcAddress( hDll, "Dll_Mul" );
  29. printf( "Dll_Mul handle: %p\n", Dll_Mul );
  30. if (!(Dll_Add && Dll_Sub && Dll_Mul))
  31. {
  32. printf( "Get function failed\n" );
  33. }
  34. //2.2.4 使用函数
  35. //由于 Dll_Add函数DLL文件里使用的是CPP方式导出,无法得到正确的函数名,所以在这里无法使用
  36. int nSub = Dll_Sub( 100, 100 );
  37. int nMul = Dll_Mul( 100, 100 );
  38. printf( "nSub:%d\n", nSub );
  39. printf( "nMul:%d\n", nMul );
  40. //2.2.5 释放动态库,看样子有加载就有释放的预言就又实现了
  41. FreeLibrary( hDll );
  42. }
  43. int _tmain(int argc, _TCHAR* argv[])
  44. {
  45. UseDll( );
  46. return 0;
  47. }





posted @ 2016-06-10 10:12  -刀狂剑痴-  阅读(165)  评论(0编辑  收藏  举报