WinCE下DLL的加载和调用

来源:互联网 发布:数据分析的方法有哪些 编辑:程序博客网 时间:2024/05/21 07:57
//.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:FrInitfrInit;FrDeInitfrDeInit;FrShowfrShow;FrHidefrHide;FrRevHostDatafrRevHostData;FrSetCallBackFunfrSetCallBackFun;FrSetHostHWndfrSetHostHWnd;};
</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;}

0 0
原创粉丝点击