dlltest3.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // dlltest3.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include <Windows.h>
  5. // 显示调用dll:dll;
  6. // 只需要dll;
  7. int _tmain(int argc, _TCHAR* argv[])
  8. {
  9. // 1.定义导出函数的函数指针;
  10. typedef int (*API_ADD)(int a,int b); // 缺省调用约定:__cdecl(项目本身调用约定),否则要指定__stdcall,如: typedef int (__stdcall *API_ADD)(int a,int b);
  11. // 2.加载dll文件;
  12. HMODULE mydll = LoadLibraryA("win32dll.dll");
  13. if ( mydll != NULL )
  14. {
  15. // 3.声明函数指针变量,并获取导出函数;
  16. API_ADD padd = (API_ADD)GetProcAddress(mydll, "add");//GetProcAddress(mydll, MAKEINTRESOURCE(1));
  17. API_ADD padd2 = (API_ADD)GetProcAddress(mydll, "add2");//GetProcAddress(mydll, MAKEINTRESOURCE(1));
  18. // ??如何导出全局变量??
  19. int *presult = (int*)GetProcAddress(mydll, "g_result");//GetProcAddress(mydll, MAKEINTRESOURCE(1));
  20. if ( padd != NULL && padd2 != NULL)
  21. {
  22. // 4.调用导出函数;
  23. printf("%d\n",padd(9,9));
  24. *presult = 30;
  25. printf("%d\n",padd2(9,9));
  26. }
  27. else
  28. {
  29. printf("加载dll函数出错\n");
  30. }
  31. // 释放dll;
  32. FreeLibrary(mydll);
  33. mydll = NULL;
  34. padd = NULL;
  35. padd2 = NULL;
  36. }
  37. getchar();
  38. return 0;
  39. }