工控编程吧

标题: 上位机MFC如何显式链接DLL [打印本页]

作者: qq263946146    时间: 2019-8-10 14:49
标题: 上位机MFC如何显式链接DLL
显式链接是指定应用程序在执行过程当中通过代码动态的加载DLL文件,也可以随时卸载DLL文件,
这是隐式链接所无法作到的,所以显式链接具有更好的灵活性,对于解释性语言更为合适。
不过实现显式链接要麻烦一些。
在程序中我们可以使用函数LoadLibrary或MFC提供的AfxLoadLibrary显式的将自己所做的动态链接库调进来,
此后再用GetProcAddress()获取想要引入的函数。
这样就可以象使用如同在应用程序自定义的函数一样来调用动态库里的函数。
在应用程序退出之前,应该用FreeLibrary或MFC提供的AfxFreeLibrary释放动态链接库。

例如我们有一个动态库test.dll,里面有一个函数fnTest供我们使用。
我们就可以编写一个按钮点击函数来测试查看效果。

  1. void CDemoDlg::OnTest()
  2. {
  3.         //加载DLL
  4.         HINSTANCE hModule = LoadLibrary(_T("test.dll"));
  5.         if (hModule == NULL)
  6.         {
  7.                 AfxMessageBox(_T("test.dll加载失败\n"));
  8.                 return;
  9.         }

  10.         typedef int (_cdecl *FUNTEST)(void);
  11.         FUNTEST pfnTest;

  12.         //获得导出函数的地址

  13.         pfnTest = (FUNTEST)GetProcAddress(hModule, "fnTest");

  14.         //调用导出函数
  15.         if (pfnTest != NULL)
  16.         {
  17.                 int nValue = (*pfnTest)();
  18.                 CString strMessage = _T("");
  19.                 strMessage.Format(_T("%d"), nValue);
  20.                 AfxMessageBox(strMessage);
  21.         }
  22.         else
  23.         {
  24.                 int n = GetLastError();
  25.                 TRACE(_T("LastError:%d\n"), n);       
  26.         }

  27.         //释放DLL
  28.         FreeLibrary(hModule);
  29. }
复制代码







欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4