1、导出接口
//抽象类
class CDev
{
virtual bool Ex_OPenDev()=0;
virtual bool Ex_OPenDev()=0;
//..
}
HRESULT CreateDev(CDev ** pp_obj)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
*pp_obj = new CHSExMotionDev;
return TRUE;
}
//输出接口
extern "C" __declspec(dllexport) HRESULT CreateDev(CDev **pp_MotionDev);
typedef HRESULT (*TDev)(CDev **pp_Dev);
2、找到dll路径,使用LoadLibrary
CString strDllPath = strExePath+“CDev”;
HINSTANCE hInst = LoadLibrary(strDllPath);
CDev* tempDev = nullptr;
3、GetProcAddress找到要使用的函数
GetProcAddress函数原型:
FARPROC GetProcAddress(
HMODULE hModule, // DLL模块句柄
LPCSTR lpProcName // 函数名
);
实例
if(hInst)
{
TDev _CreateDev = (TDev)GetProcAddress(hInst, "CreateDev" );//获取函数指针
if ( _CreateDev )
{
CSDDev* tempDev = nullptr;
_CreateDev(&tempDev);
tempDev->Ex_SetAlarm(g_ShowMsg);
}
}
参考: