www.pudn.com > isee_code01231.zip > DcxModule.cpp


// DcxModule.cpp : Defines the initialization routines for the DLL. 
// 
 
#include "stdafx.h" 
#include "DcxModule.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
static char ModuleProcessImgType[]="DCX";				// 本模块能处理的图像类型 
static char WriterList[]="此处写上你的名字";			// 本模块的作者列表 
static char WriterMess[]="在此处添入你的留言^_^";		// 作者留言 
 
// 
//	Note! 
// 
//		If this DLL is dynamically linked against the MFC 
//		DLLs, any functions exported from this DLL which 
//		call into MFC must have the AFX_MANAGE_STATE macro 
//		added at the very beginning of the function. 
// 
//		For example: 
// 
//		extern "C" BOOL PASCAL EXPORT ExportedFunction() 
//		{ 
//			AFX_MANAGE_STATE(AfxGetStaticModuleState()); 
//			// normal function body here 
//		} 
// 
//		It is very important that this macro appear in each 
//		function, prior to any calls into MFC.  This means that 
//		it must appear as the first statement within the  
//		function, even before any object variable declarations 
//		as their constructors may generate calls into the MFC 
//		DLL. 
// 
//		Please see MFC Technical Notes 33 and 58 for additional 
//		details. 
// 
 
//		在图像读写模块中,如果想分配内存,请使用API函数GlobalAlloc() 
//		,如果想释放内存请使用GlobalFree()函数。不要使用诸如:new 
//		、malloc()等函数。这是为了使各模块之间可以异地释放内存。 
// 
// 
 
///////////////////////////////////////////////////////////////////////////// 
// CDcxModuleApp 
 
BEGIN_MESSAGE_MAP(CDcxModuleApp, CWinApp) 
	//{{AFX_MSG_MAP(CDcxModuleApp) 
		// NOTE - the ClassWizard will add and remove mapping macros here. 
		//    DO NOT EDIT what you see in these blocks of generated code! 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CDcxModuleApp construction 
 
CDcxModuleApp::CDcxModuleApp() 
{ 
	// TODO: add construction code here, 
	// Place all significant initialization in InitInstance 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// The one and only CDcxModuleApp object 
 
CDcxModuleApp theApp; 
 
 
// 接口函数声明 — 第一层,唯一与外界联系的接口 
int WINAPI AccessDCXModule(INFOSTR *pInfo) 
{ 
	// 这个函数可以不作修改的使用,除非你的返回值多于两种。 
 
	switch(pInfo->comm) 
	{ 
	case	CMD_GETPROCTYPE:	// 获取本模块能处理的图像类型 
		_fnCMD_GETPROCTYPE(pInfo); 
		break; 
	case	CMD_GETWRITERS:		// 获取本模块的作者列表,多人时用逗号分隔 
		_fnCMD_GETWRITERS(pInfo); 
		break; 
	case	CMD_GETWRITERMESS:	// 获取作者们的留言 
		_fnCMD_GETWRITERMESS(pInfo); 
		break; 
	case	CMD_GETBUILDID:		// 获取图像模块内部版本号 
		_fnCMD_GETBUILDID(pInfo); 
		break; 
	case	CMD_IS_VALID_FILE:	// 判断指定文件是否是有效的WMF文件 
		_fnCMD_IS_VALID_FILE(pInfo); 
		break; 
	case	CMD_GET_FILE_INFO:	// 获取指定文件的信息 
		_fnCMD_GET_FILE_INFO(pInfo); 
		break; 
	case	CMD_LOAD_FROM_FILE:	// 从指定图像文件中读取数据 
		_fnCMD_LOAD_FROM_FILE(pInfo); 
		break; 
	case	CMD_SAVE_TO_FILE:	// 将数据保存到指定文件中 
		_fnCMD_SAVE_TO_FILE(pInfo); 
		break; 
	case	CMD_IS_SUPPORT:		// 查询某个命令是否被支持 
		_fnCMD_IS_SUPPORT(pInfo); 
		break; 
	case	CMD_RESIZE:			// 从新获取指定尺寸的图像位数据(只适用于矢量图像) 
		_fnCMD_RESIZE(pInfo); 
		break; 
	default: 
		pInfo->result = ER_ILLCOMM; // 非法命令 
		ASSERT(FALSE);			// 调用者的程序设计有问题 :-) 
		break; 
	} 
 
	// 执行命令成功返回1, 失败返回0 
	return (pInfo->result==ER_SUCCESS)? 1:0; 
} 
 
 
 
 
 
// 命令解释函数 — 第二层解释函数 
//********************************************************************// 
 
// 操作命令解释函数---解释:CMD_IS_SUPPORT命令 
// 查询某个命令是否被支持 
void _fnCMD_IS_SUPPORT(INFOSTR *pInfo) 
{ 
	// 这个函数是为客户程序查询时使用,如果你实现了对某个命令的 
	// 解释,可修改相应的case中的设置,使其返回ER_SUCCESS,这就 
	// 表示你的模块已经支持该命令了。同时,现在的这个文件中已包 
	// 含了对前四个命令的解释,你只需向还未支持的命令函数中添加 
	// 代码即可。 
 
	ASSERT(pInfo->result == ER_EMPTY); 
 
	switch(pInfo->annexdata.cmAnnData)		  
	{ 
	case	CMD_GETPROCTYPE:	// 获取本模块能处理的图像类型 
		pInfo->result = ER_SUCCESS; 
		break; 
	case	CMD_GETWRITERS:		// 获取本模块的作者列表,多人时用逗号分隔 
		pInfo->result = ER_SUCCESS; 
		break; 
	case	CMD_GETWRITERMESS:	// 获取作者们的留言 
		pInfo->result = ER_SUCCESS; 
		break; 
	case	CMD_GETBUILDID:		// 获取图像模块内部版本号 
		pInfo->result = ER_SUCCESS; 
		break; 
	case	CMD_IS_VALID_FILE:	// 判断指定文件是否是有效的WMF文件 
		pInfo->result = ER_NOTSUPPORT; 
		break; 
	case	CMD_GET_FILE_INFO:	// 获取指定文件的信息 
		pInfo->result = ER_NOTSUPPORT; 
		break; 
	case	CMD_LOAD_FROM_FILE:	// 从指定图像文件中读取数据 
		pInfo->result = ER_NOTSUPPORT; 
		break; 
	case	CMD_SAVE_TO_FILE:	// 将数据保存到指定文件中 
		pInfo->result = ER_NOTSUPPORT; 
		break; 
	case	CMD_IS_SUPPORT:		// 查询某个命令是否被支持 
		pInfo->result = ER_SUCCESS; 
		break; 
	case	CMD_RESIZE:			// 获取指定尺寸的图像(只适用于矢量图像) 
		pInfo->result = ER_NOTSUPPORT; 
		break; 
	default: 
		pInfo->result = ER_NOTSUPPORT; 
		break; 
	} 
} 
 
 
// 操作命令解释函数---解释:CMD_GETPROCTYPE命令 
// 获取本模块能处理的图像类型,如:BMP,PCX等等 
void _fnCMD_GETPROCTYPE(INFOSTR *pInfo) 
{ 
	// 这是预定义的函数代码,你可以不必修改的使用。 
 
	// 根据接口定义,此时附加数据应被清空为0,所以下此断言 
	ASSERT(pInfo->annexdata.scAnnData[0] == 0); 
	ASSERT(pInfo->result == ER_EMPTY); 
	// 复制能处理的类型字符串 
	::CopyMemory((PVOID)pInfo->annexdata.scAnnData, (PVOID)ModuleProcessImgType,  
		sizeof(ModuleProcessImgType)); 
 
	pInfo->result = ER_SUCCESS; 
} 
 
 
 
// 操作命令解释函数---解释:CMD_GETWRITER命令 
// 获取本模块的作者列表,多人时用逗号分隔 
void _fnCMD_GETWRITERS(INFOSTR *pInfo) 
{ 
	// 这是预定义的函数代码,你可以不必修改的使用。 
 
	// 根据接口定义,此时附加数据应被清空为0,所以下此断言 
	ASSERT(pInfo->annexdata.scAnnData[0] == 0); 
	ASSERT(pInfo->result == ER_EMPTY); 
	// 复制开发者名单串 
	::CopyMemory((PVOID)pInfo->annexdata.scAnnData, (PVOID)WriterList,  
		sizeof(WriterList)); 
 
	pInfo->result = ER_SUCCESS; 
} 
 
 
// 操作命令解释函数---解释:CMD_GETWRITERMESS命令 
// 获取作者们的留言 
void _fnCMD_GETWRITERMESS(INFOSTR *pInfo) 
{ 
	// 这是预定义的函数代码,你可以不必修改的使用。 
 
	// 根据接口定义,此时附加数据应被清空为0,所以下此断言 
	ASSERT(pInfo->annexdata.scAnnData[0] == 0); 
	ASSERT(pInfo->result == ER_EMPTY); 
	// 复制开发者们的留言字符串 
	::CopyMemory((PVOID)pInfo->annexdata.scAnnData, (PVOID)WriterMess,  
		sizeof(WriterMess)); 
 
	pInfo->result = ER_SUCCESS; 
} 
 
 
 
// 操作命令解释函数---解释:CMD_GETBUILDID命令 
// 获取图像模块内部版本号 
void _fnCMD_GETBUILDID(INFOSTR *pInfo) 
{ 
	// 这是预定义的函数代码,你可以不必修改的使用。 
 
	// 根据接口定义,此时annexdata.dwAnnData应被设为0,所以下此断言 
	ASSERT(pInfo->annexdata.dwAnnData == 0); 
	ASSERT(pInfo->result == ER_EMPTY); 
	// 填写内部版本号码 
	pInfo->annexdata.dwAnnData = MODULE_BUILDID; 
 
	pInfo->result = ER_SUCCESS; 
} 
 
 
 
// 操作命令解释函数---解释:CMD_IS_VALID_FILE命令 
// 判断指定文件是否是有效的WMF文件 
void _fnCMD_IS_VALID_FILE(INFOSTR *pInfo) 
{ 
	// 这个命令一般都要进行解释,你可以参考已经编写完的某个图像读写 
	// 模块的代码,并结合本图像格式的特点来完成该函数。 
	// 如果你想解释该命令,请在下面加入代码,并修改pInfo->result的返回值: 
	// -----------------------------------------------------------------> 
 
	pInfo->result = ER_NOTSUPPORT; 
} 
 
 
 
 
// 操作命令解释函数---解释:CMD_GET_FILE_INFO命令 
// 获取指定文件的信息 
void _fnCMD_GET_FILE_INFO(INFOSTR *pInfo) 
{ 
	// 这个命令一般都要进行解释,你可以参考已经编写完的某个图像读写 
	// 模块的代码,并结合本图像格式的特点来完成该函数。 
	// 如果你想解释该命令,请在下面加入代码,并修改pInfo->result的返回值: 
	// -----------------------------------------------------------------> 
 
	pInfo->result = ER_NOTSUPPORT; 
} 
 
 
 
// 操作命令解释函数---解释:CMD_LOAD_FROM_FILE命令 
// 从指定图像文件中读取数据 
void _fnCMD_LOAD_FROM_FILE(INFOSTR *pInfo) 
{ 
	// 这个命令一般都要进行解释,你可以参考已经编写完的某个图像读写 
	// 模块的代码,并结合本图像格式的特点来完成该函数。 
	// 如果你想解释该命令,请在下面加入代码,并修改pInfo->result的返回值: 
	// -----------------------------------------------------------------> 
 
	pInfo->result = ER_NOTSUPPORT; 
} 
 
 
 
// 操作命令解释函数---解释:CMD_SAVE_TO_FILE命令 
// 将数据保存到指定文件中 
void _fnCMD_SAVE_TO_FILE(INFOSTR *pInfo) 
{ 
	// 这个命令不一定要解释,你可以参考本图像格式的具体境况来决定 
	// 是否解释该命令。 
	// 如果你想解释该命令,请在下面加入代码,并修改pInfo->result的返回值: 
	// -----------------------------------------------------------------> 
 
	pInfo->result = ER_NOTSUPPORT; 
} 
 
 
 
 
// 操作命令解释函数---解释:CMD_RESIZE命令 
// 重新获取指定尺寸的图像位数据(只适用于矢量图像) 
void _fnCMD_RESIZE(INFOSTR *pInfo) 
{ 
	// 这个命令一般的图像读写模块不需要支持,它只适用于矢量图像, 
	// 比如WMF、EMF之类。 
	// 如果你想解释该命令,请在下面加入代码,并修改pInfo->result的返回值: 
	// -----------------------------------------------------------------> 
 
	pInfo->result = ER_NOTSUPPORT; 
}