⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stringdriver.cpp

📁 Wince上一个简单流接口驱动的示例
💻 CPP
字号:
// StringDriver.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"

#include <tchar.h>
#define BUFSIZE 256
WCHAR achBuffer[BUFSIZE];

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
	switch(ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		RETAILMSG(1,(TEXT("Strings:DLL_PROCESS_ATTACH\n")));
		return TRUE;
	case DLL_THREAD_ATTACH:
		RETAILMSG(1,(TEXT("Strings:DLL_THREAD_ATTACH\n")));
		break;
	case DLL_THREAD_DETACH:
		RETAILMSG(1,(TEXT("Strings:DLL_THREAD_DETACH\n")));
		break;
	case DLL_PROCESS_DETACH:
		RETAILMSG(1,(TEXT("Strings:DLL_PROCESS_DETACH\n")));
		break;

#ifdef UNDER_CE
	case DLL_PROCESS_EXITING:
		RETAILMSG(1,(TEXT("Strings:DLL_PROCESS_EXITING\n")));
		break;
	case DLL_SYSTEM_STARTED:
		RETAILMSG(1,(TEXT("Strings:DLL_SYSTEM_STARTED\n")));
		break;
#endif
	}
    return TRUE;
}

//导出各符号
STRINGDRIVERDLL_API DWORD STR_Init(DWORD dwContext);
STRINGDRIVERDLL_API BOOL STR_Deinit(DWORD hDeviceConext);
STRINGDRIVERDLL_API DWORD STR_Open(DWORD hDeviceContext,DWORD AccessCode,DWORD ShareMode);
STRINGDRIVERDLL_API BOOL STR_Close(DWORD hOpenContext);
STRINGDRIVERDLL_API BOOL STR_IOControl(DWORD hOpenContext,DWORD swCode,PBYTE pBufIn,DWORD dwLenIn,PBYTE pBufOut,DWORD dwLenOut,PDWORD pdwActualOut);
STRINGDRIVERDLL_API void STR_PowerDown(DWORD hDeviceContext);
STRINGDRIVERDLL_API void STR_PowerUp(DWORD hDeviceContext);
STRINGDRIVERDLL_API DWORD STR_Read(DWORD hOpenContext,LPVOID pBuffer,DWORD Count);
STRINGDRIVERDLL_API DWORD STR_Seek(DWORD hOpenContext,long Amount,DWORD Type);
STRINGDRIVERDLL_API DWORD STR_Write(DWORD hOpenContext,LPVOID pSourceBytes,DWORD NumberOfBytes);

//以下为驱动各个派遣例程函数

STRINGDRIVERDLL_API DWORD STR_Init(DWORD dwContext)
{
	DWORD dwRet=0;
	RETAILMSG(1,(TEXT("Strings:STR_Init\n")));

	//初始化驱动程序
	memset(achBuffer,0,BUFSIZE*sizeof(WCHAR));
	//返回一个不为0的数
	dwRet=1;
	return dwRet;
}

//---------------------------------------------------------
STRINGDRIVERDLL_API BOOL STR_Deinit(DWORD hDeviceConext)
{
	BOOL bRet=TRUE;
	RETAILMSG(1,(TEXT("Strings:STR_Deinit\n")));
	return bRet;
}

//---------------------------------------------------------
STRINGDRIVERDLL_API DWORD STR_Open(DWORD hDeviceContext,DWORD AccessCode,DWORD ShareMode)
{
	DWORD dwRet=0;
	RETAILMSG(1,(TEXT("Strings:STR_Open\n")));
	//必须返回一个不为0的句柄
	dwRet=1;
	return dwRet;
}

//---------------------------------------------------------
STRINGDRIVERDLL_API BOOL STR_Close(DWORD hOpenContext)
{
	BOOL bRet=TRUE;
	RETAILMSG(1,(TEXT("Strings:STR_Close\n")));
	return bRet;
}

//---------------------------------------------------------
STRINGDRIVERDLL_API BOOL STR_IOControl(DWORD hOpenContext,DWORD swCode,PBYTE pBufIn,DWORD dwLenIn,PBYTE pBufOut,DWORD dwLenOut,PDWORD pdwActualOut)
{
	BOOL bRet=TRUE;
	RETAILMSG(1,(TEXT("Strings:STR_IOControl\n")));
	return bRet;
}

//---------------------------------------------------------
STRINGDRIVERDLL_API void STR_PowerDown(DWORD hDeviceContext)
{
	RETAILMSG(1,(TEXT("Strings:STR_PowerDown\n")));
}

//---------------------------------------------------------
STRINGDRIVERDLL_API void STR_PowerUp(DWORD hDeviceContext)
{
	RETAILMSG(1,(TEXT("Strings:STR_PowerUp\n")));
}

//---------------------------------------------------------
STRINGDRIVERDLL_API DWORD STR_Read(DWORD hOpenContext,LPVOID pBuffer,DWORD Count)
{
	DWORD dwRet=0;
	RETAILMSG(1,(TEXT("Strings:STR_Read\n")));
	//确定实际要读取的字节的大小并读取数据
	DWORD cbBuffer=wcslen(achBuffer);
	dwRet=min(cbBuffer,Count);
	wcsncpy((LPWSTR)pBuffer,achBuffer,dwRet);
	//返回实际读取的字节数
	return dwRet;
}

//---------------------------------------------------------
STRINGDRIVERDLL_API DWORD STR_Seek(DWORD hOpenContext,long Amount,DWORD Type)
{
	DWORD dwRet=0;
	RETAILMSG(1,(TEXT("Strings:STR_Seek\n")));
	return dwRet;
}

//---------------------------------------------------------
STRINGDRIVERDLL_API DWORD STR_Write(DWORD hOpenContext,LPVOID pSourceBytes,DWORD NumberOfBytes)
{
	DWORD dwRet=0;
	RETAILMSG(1,(TEXT("Strings:STR_Write\n")));

	//确定实际要写入字节的大小,写入数据
	dwRet=min(BUFSIZE,NumberOfBytes);
	wcsncpy(achBuffer,(LPWSTR)pSourceBytes,dwRet);

	//返回实际写入的字节数
	return dwRet;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -