Dll调用主程序(客户端、外部程序、宿主)函数的实现

      参考了大量网址(现列表如下),也只找到一些零星的代码段。如我般菜鸟,实在难以轻松地写出具体实现代码。

          http://topic.csdn.net/t/20060719/14/4890502.html

          http://tech.techweb.com.cn/archiver/tid-224521.html

          http://group.gimoo.net/review/8312

      经过一天的折腾,终于实现了一个简单的例子。为了记录自己的成果,同时也给像我一样的初学者提供直观的参考,节约学习时间。现将例子代码附上。注:我的编程平台是:Visual Studio2008 express

//dll.h #ifndef _DLL_H #define _DLL_H #endif #ifdef DLL_API #else #define DLL_API extern "C" _declspec(dllimport) #endif typedef void ( *PFN_MYCALLBACK)(); DLL_API void _SetCallbackFun(PFN_MYCALLBACK pCallbackFun); 

dll.cpp

#define DLL_API extern "C" _declspec(dllexport) #include "dll.h" void _SetCallbackFun(PFN_MYCALLBACK pCallbackFun) { if (0 != pCallbackFun) { pCallbackFun(); } }

 

客户端程序(主程序)为基于对话框的MFC应用程序,其中自定义了供DLL调用的一个全局函数,当单击ok按钮时加载dll,实现调用。

void retunfun() { AfxMessageBox(_T("dllTest"));//测试全局函数 }

#includ "dll.h" //包含dll头文件 void CDLLTestDlg::OnOK() { typedef void ( *ADDPROC)(PFN_MYCALLBACK);//定义导出函数的指针类型 HINSTANCE hModDll; hModDll = ::LoadLibrary(_T("dll.dll")); if (NULL == hModDll) return; ADDPROC pMainFunc = (ADDPROC)::GetProcAddress(hModDll, "_SetCallbackFun"); if(NULL != pMainFunc) pMainFunc((PFN_MYCALLBACK)retunfun); //CDialog::OnOK(); }

按以上步骤添加,即可运行。注意,调用约定的问题。此测试例子默认为Visual C++的编译器调用约定。

你可能感兴趣的:(Dll调用主程序(客户端、外部程序、宿主)函数的实现)