WinCE下DLL的加载和调用

//.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;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值