一.场景:dxx.dll 与sxxx.dll 之间需要互通信,sxxx.dll是dxx.dll 的附加依赖项。
二.dxx.dll 向sxxx.dll 发消息
a) 在sxxx.dll 中定义全局导出函数
SDJY_API boolDZHSendMsg2Sdjy(LPCSTR strparam );
b) dxx.dll 中直接调用
DZHSendMsg2Sdjy(strparam.c_str());
三.sxxx.dll向dxx.dll 发消息
a) 在sxxx.dll 中定义导出函数RegisterDZHCallBack,参数是一个函数指针,dxx.dll 调用这个导出函数
#pragma once
#include "sdjyExport.h"
#include <wtypes.h>
typedef void (WINAPI*PFCALLBACK)(LPCSTR strUrl) ;
SDJY_API voidInitializeSdjy( LPCSTR lpCmdLine );
SDJY_API void WINAPIRegisterDZHCallBack(PFCALLBACK func);//定义导出函数RegisterDZHCallBack,参数是一个函数指针
SDJY_API voidUnInitializeSdjy( void );
SDJY_API boolDZHSendMsg2Sdjy(LPCSTR strparam );
b) 在dxx.dll 中调用RegisterDZHCallBack(SendSdjy2Dzh); SendSdjy2Dzh是全局的函数名,且参数与a中所描述的PFCALLBACK的参数相同
c) 当调用了RegisterDZHCallBack后,将传过来的函数指针保存起来
void CDZHKVMsgHelper::RegisterDZHCallBack(PFCALLBACK func)
{
gSend2DzhCallBack = func;
}
// gSend2DzhCallBack 声明:PFCALLBACK gSend2DzhCallBack;
d) 当sxxx.dll 要向dxx.dll 发消息时,即调用函数指针即可
voidCDZHKVMsgHelper::SendData( string& strData, bool bBase64/* = false*/ )
{
if(gSend2DzhCallBack)
{
(*gSend2DzhCallBack)(strData.c_str());
}
}