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