//.h文件
<span style="font-family: Arial, Helvetica, sans-serif;">#pragma once</span>
class fr_windowdll
{
private:
HINSTANCE m_hInst;
BOOL m_bSucceed;
public:
fr_windowdll(void);
~fr_windowdll(void);
static fr_windowdll& Instance();
static fr_windowdll _fr_windowdll;
BOOL LoadDll( LPCTSTR lpDllName );
BOOL FreeDll();
typedef BOOL (*cbFun)(char* pbuf, int len, LPVOID lp);
typedef BOOL (WINAPI *FrInit)(void);
typedef BOOL (WINAPI *FrDeInit)(void);
typedef BOOL (WINAPI *FrShow)(void);
typedef BOOL (WINAPI *FrHide)(void);
typedef void (WINAPI *FrRevHostData)(char* pbuf, int len);
typedef void (WINAPI *FrSetCallBackFun)(cbFun fun, LPVOID lp);
typedef void (WINAPI *FrSetHostHWnd)(HWND hWnd);
// private:
FrInit frInit;
FrDeInit frDeInit;
FrShow frShow;
FrHide frHide;
FrRevHostData frRevHostData;
FrSetCallBackFun frSetCallBackFun;
FrSetHostHWnd frSetHostHWnd;
};
</pre><pre name="code" class="cpp">//.cpp文件
#include "stdafx.h"
#include "fr_windowdll.h"
fr_windowdll fr_windowdll::_fr_windowdll;
fr_windowdll::fr_windowdll(void)
{
frInit = NULL;
frDeInit = NULL;
frShow = NULL;
frHide = NULL;
frRevHostData = NULL;
frSetCallBackFun = NULL;
frSetHostHWnd = NULL;
m_bSucceed = FALSE;
}
fr_windowdll::~fr_windowdll(void)
{
}
fr_windowdll& fr_windowdll::Instance()
{
return _fr_windowdll;
}
BOOL fr_windowdll::LoadDll( LPCTSTR lpDllName )
{
HINSTANCE m_hInst;
m_hInst = LoadLibrary( lpDllName );
if( m_hInst )
{
frInit = (FrInit)GetProcAddress(m_hInst, _T("fr_Init"));
if(frInit == NULL)
return m_bSucceed;
frDeInit = (FrDeInit)GetProcAddress(m_hInst, _T("fr_DeInit"));
if(frDeInit == NULL)
return m_bSucceed;
frShow = (FrShow)GetProcAddress(m_hInst, _T("fr_Show"));
if(frShow == NULL)
return m_bSucceed;
frHide = (FrHide)GetProcAddress(m_hInst, _T("fr_Hide"));
if(frHide == NULL)
return m_bSucceed;
frRevHostData = (FrRevHostData)GetProcAddress(m_hInst, _T("fr_revHostData"));
if(frRevHostData == NULL)
return m_bSucceed;
frSetCallBackFun = (FrSetCallBackFun)GetProcAddress(m_hInst, _T("fr_SetCallBackFun"));
if(frSetCallBackFun == NULL)
return m_bSucceed;
frSetHostHWnd = (FrSetHostHWnd)GetProcAddress(m_hInst, _T("fr_SetHostHWnd"));
if(frSetHostHWnd == NULL)
return m_bSucceed;
m_bSucceed = TRUE;
}
return m_bSucceed;
}
BOOL fr_windowdll::FreeDll()
{
if( m_bSucceed )
return FreeLibrary(m_hInst);
return FALSE;
}
/***************************
*
*
*
* DLL的调用
*
*
*
***************************/
BOOL RECEIVE_DATA(char *cBuffer, int dwLen, LPVOID lp);
DWORD THDFrRevHostData( LPVOID lpParameter )
{
CE9101MainDlg* pDlg = (CE9101MainDlg*)lpParameter;
while(true)
{
char buff[100];
memset(buff, 0, sizeof(buff));
WORD len = 0;
Sleep(100);
fr_windowdll::Instance().frSetCallBackFun(RECEIVE_DATA, NULL);
}
}
// 回调函数实现
BOOL RECEIVE_DATA(char *cBuffer, int dwLen, LPVOID lp)
{
if (NULL == cBuffer || 0 == dwLen)
return FALSE;
char *m_buffer = {0};
// memset( m_buffer, 0, sizeof(m_buffer) );
wchar_t wcText[1024];
memset(wcText, 0, sizeof(wcText));
int len = 0;
len = MultiByteToWideChar(CP_UTF8, 0, cBuffer, -1, NULL, 0);
MultiByteToWideChar(CP_UTF8, 0, cBuffer, -1, wcText, len);
char cTemp[1024];
memset(cTemp, 0, sizeof(cTemp));
wcstombs(cTemp, (LPCTSTR)wcText, len);
CString str;
str = wcText;
OutputDebugString(str);
return TRUE;
}