PB 调用VC 创建的DLL 在MIS 中的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PB调用VC创建的DLL在MIS中的设计与实现
DLL Founded by the call of PB to VC and its design and Implementation in MIS
(1.北京理工大学;2.军械工程学院)陈建泗1,2 商建云1
Chen JianSi Shan JianYun 摘 要:在管理信息系统(MIS)的开发中,常常需要用到OLE技术实现Exce l报表,PowerBuilder 虽然功能强大,但它的OLE控件功能相对较差,而VC具有强大的开发报表功能。以院校教学保障管理中实际应用的教材库存管理信息系统为实例,设计PowerBuilder与VC之间DLL调用接口和Excel报表实现流程,采用VC开发一个实现Excel报表的DLL库,然后通过PowerBuilde r 调用DL L中的函数,实现Excel报表功能。实现了构件的复用,提高了软件开发效率。
关键字:动态链接库;OLE;MIS;PB;VC
中国分类号:TP393 文献标识码:A
Abstract:In developing of MIS,usually need to use OLE Technology to realize Excel Statements, PowerBuilder is powerful,but its OLE ActiveX Control function is weak,Excel statement function is powerful in VC.The paper designs the called interface between PowerBuilder and VC, and designs the realizing process in Excel Statements base on MIS of Textbook Stock.,and develops a DLL that has the function to realize Excel Statements,the function of DLL is called by PowerBuilder to realize Excel Statements, realizing component reuse and improving efficiency in the development of software.
Key words: DLL;OLE;MIS;PowerBuilder;VC++
1引言
PowerBuilder是一种面向C/S方式的数据库应用程序的开发工具。PB拥有数据窗口、嵌入式SQL语句等技术,在开发数据库应用程序时显得特别方便。但在涉及到系统底层的一些功能时,PB本身提供的功能就有些不尽如人意。因为Windows操作系统提供给用户的接口是C语言函数形式,而VC在调用系统底层功能方面,从编程角度来讲就要方便得多。VC还有许多PB所不具备的优点,比如数据结构表达能力强,实现复杂算法的程序相对容易开发,运行速度快等。此外,不少外围设备的驱动程序提供的也是C接口。若能将这两种语言结合起来使用,充分发挥它们各自的优点,将会大大提高开发效率、增强应用程序的功能。在管理信息系统的开发中,以VC++作为开发动态链接库DLL的工具,在动态链接库中采用OLE技术,实现Excel 报表,然后再通过PB调用动态链接库, 实现PowerBuilder与VC++的集成,从而实现软件的复用,大大提高系统的开发和运行效率。本文以在院校教学保障管理中实际应用的教材库存管理信息系统为例进行介绍。
2MIS开发中导出Excel的设计
管理信息系统常常需要将查询所得的结果导出到Excel中,便于数据的记录和分发。在生成Excel报表时,教材库存管理信息系统采用了Office组件来实现此功能,以动态链接库DLL的形式完成此项功能。定义好接口关系,只需把要导出的数据以参数形式传给DLL,DLL调用指定的模版完成数据的载入,通过文件流的方式来实现生成Excel文件,并保存到指定的路径。因为VC具有强大的开发报表的功能,系统通过VC开发DLL,然后在PowerBuilder中调用此DLL 实现Excel报表功能。
定义的函数名称和接口如下:
动态链接库文件名称:ExcelDLL;
函数名称:ListToExl(CList *plist,int iFlag);
来,Excel文档。
图1所示。
上图是导出Excel报表的流程图,其中最主要的是些不同类型的数据到相应的Excel单元格中,模版文件中的标题已经确定,占其中的一行,导出的数据从第二行开始写入。从列表(List)的第一列开始,取列表表头每一列的名称,类型为CString,将其写在第二行。然后从第一行第一列开始取数据,写入相应的Excel表格中,判断完成全部数据写入时,将文件流中的数据保存为Excel文档,指定文档名称,并保存到指定路径。
3VC++ 创建DLL实现对Excel表格文件操作
3.1.1定义DLL
在VC6.0中可以用“MFC AppWizard”自动生成“Win32 DLL”和“MFC AppWizard DLL”。启动VC后,从“File/New”菜单项,选择“New”对话框中的“Projects”标签,选择新项目为“MFC AppWizard(DLL)”,可输入工程名为ExcelDLL,然后点击“OK”按钮,弹出选择DLL类型对话
框后,再选择DLL类型为:Regular DLL using shared MFC DLL,最后点击“Finish”按钮。这样,AppWizard将自动创建一个包含基本要素的DLL框架,接着手工添加相关的代码。
首先在ExcelDLL.cpp文件中,添加如下的函数
extern "C"_declspec(DLLexport)
void PASCAL ListToExl(CList *plist,int iFlag)
{
//实现VC对excel的操作。
}
接着打开ExcelDLL.def文件,在EXPORTS下输入函数说明,文件内容如下:
LIBRARY "pbDLL"
DESCRIPTION ‘pbDLL Windows Dynamic Link Library’
EXPORTS;
Explicit exports can go here
ListToExl@1.
在VC中定义DLL的接口供PB调用。
3.1.2Excel报表的实现
下面具体介绍ListToExl函数中如何运用OLE技术实现Excel报表,操作步骤如下:
1)在一个上面建立的ExcelDLL工程按Ctrl + W 弹出ClassWizard对话框。
2)选择Add Class添加类型库,找到office的安装目录,找到Excel类型库EXCLE9.OLB,
将其添加,然后在工程中会有excle9.h和excle9.cpp两个文件。
3)在弹出的对话框中选择所有的函数,本文主要用到Excel操作的几个类:_Application、
WorkBooks、_WorkBook、WorkSheets、_WorkSheet、Range,然后就可以实现对Excel
类型库函数的调用了。
4)启动Excel服务。其主要代码如下:
_Application ExcelApp; // 定义Excel应用程序
Workbooks wbsBooks;Workbook wbBook;Worksheets wssSheets;Worksheet wsSheet; Range rngXls;
FontXls font; // 字体
BordersXls border; // 边框
if (::CoInitialize( NULL ) == E_INV ALIDARG)
{ AfxMessageBox(_T("初始化Com失败!"));}
_Workbook excelBook; Worksheets excelSheets; _Application excelApp;
BOOL CreateApplication()
...{
if (!excelApp.CreateDispatch("Excel.Application",NULL)) //启动Excel的COM服务
...{
AfxMessageBox("创建Excel服务失败!");
::CoUninitialize();
return FALSE;
}
excelApp.SetVisible(FALSE); excelApp.SetDisplayAlerts(FALSE); return TRUE;
}