VC技术

2024-10-19

VC技术(共12篇)

VC技术 篇1

1概述

通常人们说的VC就是指VC++。VC++是微软公司开发的一个IDE,也就是使用C++的一个开发平台。MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等;COM是代码共享的二进制标准,需要掌握其基本原理。严格来说VC++不是门语言,虽然它和C++之间有密切的关系。可以把C++看作为一种“工业标准”,而VC++则是某种操作系统平台下的“厂商标准”,而“厂商标准”是在遵循“工业标准”的前提下扩展而来的。

2编程方法

VC是与Windows系统联系非常紧密的编程工具,它兼有高级和低级语言的双重性,功能强大、灵活、执行效率高。为任何Windows平台建立应用程序时,程序员都有两种选择:API或MFC。使用API,程序员是在Windows应用程序界面(API)的水平上编写代码。该界面是由几百个C++函数所组成,这些函数在Windows API参考手册中都有介绍。对于Windows NT,API被称为Win32 API,以区别于其用于Windows3.1的16位API。Microsoft也提供了C++库,就是Microsoft基本类库(MFC),它减少了大量在建立Windows程序时必须编写的代码,同时它还提供了所有C++编程的优点,例如继承和封装。MFC是可移植的,在Windows 3.1下编写的代码可以很容易地移植到Windows NT或Windows 95上。

3编程技巧

3.1技巧

对于编程来说,都是从helloword开始,下面列出了“hello world”程序的代码。

该程序由6部分组成。首先包含了头文件afxwin.h(第2行),该头文件包含有MFC中所使用的所有类型、类、函数和变量,也包含了其他头文件,如Windows API库等。第3至8行从MFC说明的标准应用程序类CWinApp继承出了新的应用程序类CHelloApp。该新类是为了要重载CWinApp中的InitInstance成员函数。InitInstance是一个应用程序开始执行时要调用的可重载函数。在第10行中,说明应用程序作为全局变量的一个实例,该实例是很重要的,因为它要影响到程序的执行。当应用程序被装入内存并开始执行时,全局变量的建立会执行CWinApp类的缺省构造函数。全局变量创建完成后首先执行WinMain(),在WinMain()中将调用在18至26行定义的InitInstance函数。在第11至17行中,CHelloWindow类是从MFC中的CFrameWnd类继承来的。CHelloWindow是作为应用程序在屏幕上的窗口。建立新的类以便实现构造函数、析构函数和数据成员。第18至26行实现了InitInstance函数。该函数产生一个CHelloWindow类的实例,会执行第27行至41行中类的构造函数,它也会把新窗口放到屏幕上。第27至41行实现了窗口的构造函数,该构造函数实际是建立了窗口,然后在其中建立一个静态文本控制。

3.2高级技巧

在编程方面,比较麻烦的就是多线程编程。MFC中有两类线程,分别称之为工作者线程和用户界面线程,主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程、打印机的后台打印等。用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等。但对于Win32的API编程而言,这两种线程是没有区别的,它们都只需线程的启动地址即可启动线程来执行任务。

在MFC中,一般用全局函数AfxBeginThread()来创建并初始化一个线程的运行,该函数有两种重载形式,分别用于创建工作者线程和用户界面线程。两种重载函数原型和参数分别说明如下:

PfnThreadProc:指向工作者线程的执行函数的指针,线程函数原型必须声明如下:

UINT ExecutingFunction(LPVOID pParam);

ExecutingFunction()应返回一个UINT类型的值,用以指明该函数结束的原因。一般情况下,返回0表明执行成功。pParam:传递给线程函数的一个32位参数,执行函数将用某种方式解释该值。nPriority:线程的优先级。如果为0,则线程与其父线程具有相同的优先级。nStackSize:线程分配堆栈的大小,单位为字节。如果nStackSize被设为0,则线程的堆栈被设置成与父线程堆栈相同大小。dwCreateFlags:如果为0,则线程在创建后立刻开始执行。如果为CREATE_SUSPEND,则线程在创建后立刻被挂起。lpSecurityAttrs:线程的安全属性指针,一般为NULL。

pThreadClass是指向CWinThread的一个导出类的运行时类对象的指针,该导出类定义了被创建的用户界面线程的启动、退出等;其他参数同形式1。CWinThread类的数据成员及常用函数的功能如下:

m_hThread:当前线程的句柄;

m_nThreadID:当前线程的ID;

m_pMainWnd:指向应用程序主窗口的指针;

该函数中的dwCreateFlags、nStackSize、lpSecurityAttrs参数和API函数CreateThread中的对应参数有相同含义,该函数执行成功,返回非0值,否则返回0。一般情况下,调用AfxBeginThread()来一次性地创建并启动一个线程,但是也可以通过两步法来创建线程。

参考文献

[1]王挺,周会平,贾丽丽,等.C++程序设计[M].清华大学出版社,2005.

[2]HaxveyM.Deitel,paulJ.Deitel编著,施平安,江永忠,瞿中译.操作系统[M].清华大学出版社,2007.

VC技术 篇2

首先作个简要解释:公司的估值分为融资前估值和融资后估值,比如融资前估值是400万美元,融资100万美元,那么融资后的估值就应该是500万美元,那么这100万美元带来的股权稀释就是20%(也就是说创业者100%的股权被稀释成了80%)。

如果融资时VC还要你根据融资前的估值设立一个期权池的话我们再来看情况:公司融资前估值仍然是400万美元,融资100万美元,融资后估值仍然为500万美元,然而如果要设立一个15%的期权池(换算成实际价值为15%×500万美元=75万美元)的话,创业者的真正股权价值就变得只有325万美元了(此前为400万美元)。那么此时的股权分配变成了以下情况:创始人65%,VC 20%,未发行的期权池15%。也就是说引入一笔总额为100万美元的投资,创始人被稀释掉的股权不是20%而是35%,

也难怪Mark说这是“VC变相压价”了,创业者肯定也不会喜欢这样的做法了。不过我的具体看法如下:

第一点就是VC应该很直率的对待这件事,因为其本质上就是一个简单的价格问题。比如在以上情况,若融资前估值降为325万美元的话,不设立期权池,我也会很高兴 的投下100万美元,但是如果说估值保持在400万美元的话,那我就会要求创始人设立这样一个期权池了。这两个选择是一样的。所以创始人们要做的就是分别计算好不设期权池和设期权池下的公司融资前估值,这样融资时就会少很多争论。

第二点是期权池的设立要合理并基于某些实际预算情况,也就是说为什么要设立期权池,有什么用?期权池的设立一般是为了给新来公司的人才或者旧有人才发放激励股票期权用的,这样做一方面显示了公司对于未来的人才规划有一个较为清晰的想法,也能保证进一步融资前不会再稀释已分配的股权,便于换算。

在我过去的投资历史上,我一般是要求创始人设立约10%的期权池,也有过15%的,但是非常少,5%的就更少了。但是这个数字不是随便选的或猜的,创始人需要好好计算一下才能在和VC的谈判中更加自如。

最后我想以一个我自己的小故事结尾。当年Zynga的共同创始人Mark Pincus和我谈判Zynga的第一轮融资的时候,我们为这个问题争论得很厉害,因为他十分不愿意设立这样一个期权池。后来当我们一致看到这只是一个估值问题时,谈判就变得容易多了,最后他得到了自己想要的估值,我也得到了一个期权池。顺便说一下,Zynga是我所做的最好的投资之一。

VC技术 篇3

关键词:可编程控制器(PCL);VC++

中图分类号:TP312文献标识码:A文章编号:1006-8937(2009)08-0112-02

鉴于目前由可编程控制器(PCL)和PC机所构成的监控系统在工业控制领域得以广泛的运用,文章将对PCL作下位机,完成现场设备的直接控制、数据收集等工作,PC机作上位机,完成数据的分析存储、状态显示等工作进行技术探讨,通过上位机对PLC的读写操作,从而完成现场数据的接收、传达与监控功能。文章以OMRON公司的CJ1G型PLC作下位机,以PC机为上位机,重点研究此分布式控制系统的通讯方式。

1硬件互联技术细节

1.1PLC与PC的硬件互联

经过对该品牌PLC的分析,可知PLC本身配有RS-232接口,大大方便了与PC机串口通信的硬件连接,文章直接采用自制电缆将PLC的RS-232口与PC机RS-232口相连,引脚对应关系图如图1:

1.2设定PLC通信方式,确定通信协议帧

CJ系列PLC单元支持以下5种串行通信功能:上位机链接通信、无协议通信、1:N或1:1链接通信、外设总线通信和串行PLC链接通信,其中上位机链接通信功能适用于上下位机并以会话的方式进行实时数据通信。

一般在控制系统中,采用单台PLC与PC机通信,上位机担当命令发起端,通过向PLC发送不同格式的命令帧,完成对PLC寄存器的读写操作。因此文章选择主机-->PLC的主链接命令通信方式。

该系统使用RS一232C端口进行通信。RS一232C端口的缺省设定是:上位机链接模式、1启动位、7数据位、偶校验、2停止位和9 600bps的波特率。用户可以通过编程工具或者SETUP(237)指令改变RS一232C端口的设定。我们首先用编程工具对PLC进行设置,其中PLC的操作模式设定为监控模式;然后断开电源,将主机与PLC的CPU单元连接,并将CPU单元DIP的引脚5设定为OFF;最后接通电源,从主机发布主链接命令,进行上下位机的通信。

由于整个通信系统采用上位机主动的通信方式。上位机与PLC的通信是通过使用命令帧(command)和响应帧(response)进行数据的发送和接收。帧的发送与接收图2所示:

命令的格式如图3所示,命令必须以@开始,机号No为2个十进制数,表示上位机识别所连接PLC的机号。识别码是2个字符的命令码,如RR表示读取CIO区域的内容。正文部分为设定命令的参数,对于不同的命令,正文的内容和长度可能有所不同。FCS是2个字符的帧检查序列。命令的最后2个字符是终端,表示命令的结束,由“*”和CR码组成。命令格式图3所示:

图3 命令格式

响应的格式与命令的格式相似,只是在识别码后面多了2个十六进制字符的结束码,用于返回命令的执行状态(有无错误及错误的原因)。一个帧最多由131个ACSⅡ字符组成,如果需要发送的字符超出131个,必须将数据分成若干个帧,第一帧和中间帧的结尾用分界符(CR)代替结束符(*CR)。

VC++6.0软件实现VC++6.0开发环境为串口通讯已经提供了ActiveX控件,名为MSComm控件。下面阐述对该控件属性的初始化设置以及相关实现代码。限于篇幅,此文只将重要的实现代码罗列如下:

{

My_Comm.SetCommPort(1);//选择 COM1口

My_Comm.SetSettings( 9600,E,7,1 );//设置通信参数

My_Comm.SetlnputMode(1);//设置二进制输入模式

My_Comm.SetInBufferSize(1024);//设置输入缓冲区大小

My_Comm.SetlnputLen(0);//使用Input将使MSComm控件读取接收缓冲区中的全部内容

My_Comm.SetOutBufferSize(1024);//设置输出缓冲区大小

My_Comm.SetRThreshold(1);//设置每接收一个字符触发一次OnComm事件

My_Comm.SetDTREnable(TRUE);//置DTR有效

int timeRes;

if(!My_Comm.GetPortOpen()) //如果没有开

My_Comm.SetPortOpen(TRUE);//手工打开串口

My_Comm.Getlnput();//清空输入缓冲区

timeRes=SetTimer(2,500,NULL);//安装定时器

if(timeRes==0)

{

MessageBox( “设置定时器出错” );

return ;

}

}

主要实现代码处于在WM_TIMER消息的处理函数上

void CPLCCommDlg::OnTimer(UINT nlDEvent)

{

int len;

long j;

VARIANT inputdatal:

COleSafeArray inputdata2;

BYTE datatempl,datatemp2;

BYTE commstr[17]={ ‘@’ ,’0’,‘0’,’R’,’D’,’0’, ’0’, ’0’, ’0’, ’0’, ’0’, ’0’,’2’,0x00,0x00,’*’,0x0d}

//初始化命令参数

My_Comm.SetRTSEnable(TRUE);//设置RTS线有效,请求允许发送数据

verifcation(commstr,17);//对发送的命令进行帧校验

CByteArray cbaArraylnsA;

cbaArraylnsA.RemoveAll();

for(int nlndex:0;nlndex<17;++nlndex)

{

cbaArraylnsA.Add(commstr[nIndex]);

}

My_Comm.SetOutput(COleVariant(cbaArraylnsA));//发送读取数据的命令

My_Comm.SetRTSEnable(FALSE);//设置RTS线无效,不允许发送数据

inputdatal= My_Comm.Getlnput();//读取接收缓冲区的数据

inputdata2=inputdatal;

len=inputdata2.GetOneDimSize();

for(j=0;j

{

inputdata2.GetElement(&j,inputdata+j);

}

datatempl=inputdata[15];

datatemp2=inputdata[16];

verfunction(inputdata,19);//计算接收数据的帧校验码

if(datatempl! = inputdata [15] || datatemp2 1=inputdata[16])

{

MessageBox(”Receive data invalid! );//判断接收数据是否有效

}

else

{

for(i=0;j<8;j++)

{

OutputData[j]=inputdata[j+7];//将数据存储到上位机的数据存储区中

}

}

incount=0;

CDialog::OnTimer(nlDEvent);

}

上述函数所调用的对帧进行校验的函数verifcation代码如下:

CPLCCommDlg::verfunction(BYTE vdata[],int K)

{

BYTE sum=0x00,vl=0x0f, v2=0xf0;

for(int i=0;i

{

sum^=vdata[i];

}

V1& =sum;

V2& =sum;

v2> > =4;

if(vl>=0&& vl<=9)

V1+ =0x30;

else

V1+ =0x37;

if(v2>=0&& v2<=9)

V2+ =0x30;

else

V2+=0x37;

vdata[K-3]=vl;//帧贞校验码低位字节

vdata[K-4]=v2;//帧校验码高位字节

}

2结语

VC++中数据接口技术的探讨 篇4

ADO是Microsoft 公司新的数据访问技术, 由于它是基于OLE DB接口上实现的COM对象, 其性能和易用性都达到了极佳水平。ADO并不与数据库直接打交道, 而是要通过ODBC驱动程序或OLE DB连接字符串来操作数据库。ODBC或OLE DB是应用程序与数据库进行连接通信的接口, 其作用是将特定类型数据库中的数据变换为标准而能统一操作的数据源。利用ADO对象并通过ODBC或OLE DB, 可以实现对任意数据库的存取和访问。

ADO模型包括7个对象, 主要对象有3个:Connection、Command和 Recordset , 可以被独立创建和释放。此外, 还包括其他4个集合对象:Fields、Errors、Parameters和Properties。一个典型的ADO应用程序使用Connection对象建立与数据源的连接, 然后用一个Command对象给出对数据库操作的命令, 如插入数据或者查询数据等, 而Recordset用于对结果集进行维护或者浏览等操作。其中Command命令所使用的语言与低层所对应的OLE DB数据源有关, 不同的数据源可以使用不同的命令语言, 对于关系数据库, 通常使用SQL作为命令语言。

2 VC++中使用ADO开发数据库应用程序一般步骤

2.1 引入ADO库文件

使用ADO前必须在工程的stdafx.h头文件里用直接引入符号#import引入ADO库文件, 以使编译器能正确编译。代码如下所示:

用#import引入ADO库文件

#import "c:program filescommon filessystemadomsado15.dll"no_namespaces rename ("EOF" adoEOF")

这行语句声明在工程中使用ADO, 但不使用ADO的名字空间, 并且为了避免常数冲突, 将常数EOF改名为adoEOF。现在不需添加另外的头文件, 就可以使用ADO接口了。

2.2 初始化OLE/COM库环境

必须注意的是, ADO库是一组COM动态库, 这意味应用程序在调用ADO前, 必须初始化OLE/COM库环境。在MFC应用程序里, 一个比较好的方法是在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。

BOOL CMyAdoTestApp::InitInstance ()

{

if (!AfxOleInit () ) //这就是初始化COM库

{ AfxMessageBox (“OLE初始化出错!”) ;

return FALSE;

}

}

2.3 ADO接口简介

ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。

_ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句, 如一个存储过程。使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。对于要返回记录的操作通常用_RecordserPtr来实现。而用_ConnectionPtr操作时要想得到记录条数得遍历所有记录, 而用_RecordserPtr时不需要。

_CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时, 你可以利用全局_ConnectionPtr接口, 也可以在_CommandPtr接口里直接使用连接串。如果你只执行一次或几次数据访问操作, 后者是比较好的选择。但如果你要频繁访问数据库, 并要返回很多记录集, 那么, 你应该使用全局_ConnectionPtr接口创建一个数据连接, 然后使用_CommandPtr接口执行存储过程和SQL语句。

_RecordsetPtr是一个记录集对象。与以上两种对象相比, 它对记录集提供了更多的控制功能, 如记录锁定, 游标控制等。同_CommandPtr接口一样, 它不一定要使用一个已经创建的数据连接, 可以用一个连接串代替连接指针赋给_RecordsetPtr的connection成员变量, 让它自己创建数据连接。如果你要使用多个记录集, 最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口, 然后使用_RecordsetPtr执行存储过程和SQL语句。

2.4 使用_ConnectionPtr接口

_ConnectionPtr主要是一个连接接口, 取得与数据库的连接。它的连接字符串可以是自己直接写, 也可以指向一个ODBC DSN。

_ConnectionPtr pConn;

if (FAILED (pConn.CreateInstance ("ADODB.Connection") ) )

{

AfxMessageBox ("Create Instance failed!") ;

return;

}

CString strSRC;

strSRC="Driver=SQL Server;Server=";

strSRC+="suppersoft";

strSRC+=";Database=";

strSRC+="mydb";

strSRC+=";UID=SA;PWD=";

CString strSQL = "Insert into student (no, name, sex, address) values (3, 'aaa', 'male', 'beijing') ";

_variant_t varSRC (strSRC) ;

_variant_t varSQL (strSQL) ;

_bstr_t bstrSRC (strSRC) ;

if (FAILED (pConn->Open (bstrSRC, "", "", -1) ) )

{

AfxMessageBox ("Can not open Database!") ;

pConn.Release () ;

return;

}

COleVariant vtOptional ( (long) DISP_E_PARAMNOTFOUND, VT_ERROR) ;

pConn->Execute (_bstr_t (strSQL) , &vtOptional, -1) ;

pConn.Release () ;

AfxMessageBox ("ok!") ;

2.5 使用_RecordsetPtr接口 (以连接SQL Server为例)

_RecordsetPtr pPtr;

if (FAILED (pPtr.CreateInstance ("ADODB.Recordset") ) )

{

AfxMessageBox ("Create Instance failed!") ;

return FALSE;

}

CString strSRC;

strSRC="Driver=SQL Server;Server=";

strSRC+="210.46.141.145";

strSRC+=";Database=";

strSRC+="mydb";

strSRC+=";UID=sa;PWD=";

strSRC+="sa";

CString strSQL = "select id, name, gender, address from personal";

_variant_t varSRC (strSRC) ;

_variant_t varSQL (strSQL) ;

if (FAILED (pPtr->Open (varSQL, varSRC, adOpenStatic, adLockOptimistic, adCmdText) ) )

{

AfxMessageBox ("Open table failed!") ;

pPtr.Release () ;

return FALSE;

}

while (!pPtr->GetadoEOF () )

{

_variant_t varNo;

_variant_t varName;

_variant_t varSex;

_variant_t varAddress;

varNo = pPtr->GetCollect ("id") ;

varName = pPtr->GetCollect ("name") ;

varSex = pPtr->GetCollect ("gender") ;

varAddress = pPtr->GetCollect ("address") ;

CString strNo = (char *) _bstr_t (varNo) ;

CString strName = (char *) _bstr_t (varName) ;

CString strSex = (char *) _bstr_t (varSex) ;

CString strAddress = (char *) _bstr_t (varAddress) ;

strNo.TrimRight () ;

strName.TrimRight () ;

strSex.TrimRight () ;

strAddress.TrimRight () ;

int nCount = m_list.GetItemCount () ;

int nItem = m_list.InsertItem (nCount, _T ("") ) ;

m_list.SetItemText (nItem, 0, strNo) ;

m_list.SetItemText (nItem, 1, strName) ;

m_list.SetItemText (nItem, 2, strSex) ;

m_list.SetItemText (nItem, 3, strAddress) ;

pPtr->MoveNext () ;

}

pPtr->Close () ;

pPtr.Release () ;

2.6 使用_CommandPtr接口

_CommandPtr接口返回一个Recordset对象, 并且提供了更多的记录集控制功能, 以下代码示例了使用_CommandPtr接口的方法:

代码:使用_CommandPtr接口获取数据

_CommandPtr pCommand;

_RecordsetPtr pRs;

pCommand.CreateInstance (__uuidof (Command) ) ;

pCommand->ActiveConnection=pConn;

pCommand->CommandText="select * from student";

pCommand->CommandType=adCmdText;

pCommand->Parameters->Refresh () ;

pRs=pCommand->Execute (NULL, NULL, adCmdUnknown) ;

_variant_t varValue = pRs->GetCollect ("name") ;

Cstring strValue= (char*) _bstr_t (varValue) ;

2.7 使用完后关闭连接, 释放对象所占的资源

3 结束语

ADO是应用级的编程接口, 它以OLE DB为基础, 对OLE DB进行了封装。它的主要优点是易于使用、速度快、内存支出少和使用较少的网络流量。ADO技术是微软大力支持和发展的技术, 对于致力与Visual C++的程序员来说, 了解和掌握ADO技术具有深远的意义。

摘要:介绍了ADO的特点以及在VC++中如何通过ADO开发数据库应用程序。ADO是Microsoft为最新和最强大的数据访问范例OLE DB而设计的, 是一个便于使用的应用程序层接口。ADO使您能够编写应用程序, 并以通过OLE DB可实现提供者访问和操作数据库服务器中的数据。ADO最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO在关键的应用方案中使用最少的网络流量, 并且在前端和数据源之间使用最少的层数, 所有这些都是为了提供轻量、高性能的接口, OLE自动化接口。

关键词:ADO,数据库,应用程序的开发,VC++

参考文献

[1]David Sceppa, 石钧, 葛俊.ADO编程技术[M].北京:清华大学出版社, 2001.

[2]厄拉森.MFC Visual C++6编程技术内幕[M].北京:机械工业出版社, 2000.

VC课程设计题目 篇5

(2012-04-23 – 2012-05-19)

前言:本课程设计分成自测题和综合题两部分。两部分都列入验收。

练习题:

共11道。内容覆盖主要基本技术:基本的开发环境(调试技术),文件操作,动态链接库,图形图像编程,多线程编程,控件开发等。

每个学生选择5个完成,要求如下:

必做:1;

2,3选择其一;

4,5选择其一;

6-11选择其二;

1. 基本环境调试

将例程1用VC++打开,修改错误使程序能够运行。理解编译错误,运行错误等。

2. 数据库操作

通过ODBC数据源访问数据库(ACCESS),数据库中保存以下内容:

学生姓名,性别,年龄,家庭住址,电话,电子邮件,爱好等。

再以上基础上进行该记录的读出并可编辑浏览显示。

3. 文件操作

写一个档案文件保存以下内容:

学生姓名,性别,年龄,家庭住址,电话,电子邮件,爱好等。

再以上基础上进行该文件的读出并可编辑浏览显示。

4. 图形编程

提供一个图形工具界面,让用户能够画出直线,椭圆,多边形等几何元素,结果可以保存并可读出。

5. 图像显示

编程加载显示位图文件(bmp)。实现多个位图的叠加显示效果。在此基础上,实现动画效果。

6. 字符串操作

能够从磁盘上选择打开文本文档,读入所有内容并显示,统计所有的字符数目,单词数目,中文字符串的数目。

7. 多线程技术

目的:掌握多线程编程的基本概念,掌握用户线程的编程方法和调试方法。

建立一个工程,主线程负责用户交互,界面上提供一个按钮,通过它用户建立一个新的线程处理复杂的计算。多个线程可以共享内存中的某些变量。线程可以中止,挂起。线程间需要同步。

8. 通信技术

利用套接字编写双机通信程序,从服务器接收GPS数据。协议内容如下:

0xDB,纬度(4字节浮点),经度(4字节浮点),时间(4字节CTime),速度(2字节整型),校验(1字节异或),0xDB

在此基础上,能够在屏幕上显示其位置和速度等信息。

把接收到的内容进行解析并且显示。

9. 动态链接库

目的:了解MFC 支持的三种动态链接库:Win32DLL,MFC 常规DLL, MFC扩展库。掌握封装DLL的基本方法。

步骤:

新建三个不同的DLL工程;

分别封装一些类和函数;

新建一个测试工程对上述库里的函数或类进行调用;

封装一个对话框类到DLL,并新建一个工程调用之。

10. 控件编程

利用ATL编写一个控件,并写一个测试程序进行调用。

目的:掌握ATL控件的编写方法,测试方法和调用方法。

步骤:

新建一个ATL工程;

添加ATL控件;

往接口里添加属性和事件;

修改绘制代码;

写测试程序;

11. 多媒体数据采集

利用微软的视频,音频采集API函数,编写一个能够进行图像,音频,视频采集的程序。

综合题:

1. 硬盘录像机的制作

要求:

对外接USB接口的摄像头的数据进行采集,结果保存在硬盘上。能够根据要求对文件进行检索,播放,备份,上传。

*能够架构一个视频流服务器,提供多人的基于IE的在线视频浏览。

2. 数字存贮示波器的制作

要求:编程实现一个数字存贮示波器。示波器的踪数1-10可变,示波器的数据采样点可达1024。

示波器可以实现图形以不同的形式显示(如波形图,柱图等)。

示波器的横向,纵向均可以用鼠标进行分辨率调整。

示波器提供文件接口,可以文件读写。

结果以DLL形式封装。

创建一个客户程序对示波器进行测试。

参考:SIMULINK的示波器。

3. 大地面积测量

要求:在文本文件中保存了一条封闭路径的顶点的经纬度数据,计算由这条路封闭出的区域面积。

步骤:

(1)自行编辑三个不同大小区域的文本文件(区域范围50KM,500KM,5000KM);

(2)生成一个单独的对话框工程(项目);

(3)导入区域文件;

(4)函数说明 float Area(int nNum/*顶点数目:>=3*/, float* vX/*经度*/, float* vY/*纬度

*/, char Coord=1/*坐标系: 1 经纬度 2平面坐标*/);

(5)对于结果进行误差分析。

参考资料:地理坐标变换算法(上网搜索)

测试方法:用MATLAB工具包函数可以进行对比测试。

4. 文件编辑

创建一个多文档工程,实现对于磁盘文件的浏览,编辑等功能。

能够以文本文件,二进制文件方式打开文件;

支持剪贴板功能;

支持搜索,查找,替换功能;

支持文件定位;

功能可参考:磁盘文件工具程序UltraEdit。

5. 个人简历

创建一个个人简历程序,能够编辑自己的个人资料,添加自己的相片集进行浏览,具有保存,打印等功能。

6.文字聊天室

做一个基于点对点的聊天程序。同时具有客户端和服务器功能。

字体颜色可设置;

具有丰富的表情;

聊天记录可以保存,浏览。

7. 卡拉OK点歌管理系统

在本地硬盘库里存放歌曲文件(暂定WAV文件格式)。按照歌手,歌名(字数),类别进行检索播放。

对歌曲库可以进行管理,如添加,删除等。

计时计费功能。

8. 酒店管理系统

实现酒店客房的预定,登记,分配,计费等功能。

基本步骤:

(1)数据库后台设计,数据准备;

(2)界面设计;

(3)功能实现;

(4)测试;

9. 数字图像格式转换

能够进行BMP,GIF,TIF,JPG等图像的显示,保存,转换;

能够对图像进行处理:平滑,滤波,增强等。(算法可自行查找)

10. 简易电子地图编辑

用MapX实现地图的编辑功能:打开地图(Tab格式), 添加/删除点,线,面元素,通过属性查询并高亮显示。

请大家发挥想象,独立完成。

课程设计安排

时间与进度安排

课程设计共40学时,分在四周内完成。参考的时间分配如下(以每天4学时为例): 第1天: 基本环境熟悉;

第2-4 天: 基础练习题;

第5-9 天: 综合题;

第10天: 验收;

注:基础练习题11道中完成5道(如前所述),可在完成后请老师验收。综合课题任选一道。为避免重复,原则上每个题目只允许一定数目的同学选择。

实验报告要求

实验报告包括两部分的题目(基础练习题和综合题)。内容包括:

1. 实验目的2. 算法流程框图;

3. 数据结构说明;

4. 程序说明;

5. 测试结果;

6. 附件:程序代码。

成绩评定

成绩评定遵循过程与结果并重的原则,给出考查课成绩等级(不及格,及格,中等,良好,优秀)。依据下列因素进行学生的成绩评定:

1. 出勤率;

出勤率低于30%者将被成绩降级,低于50%将被要求重修。

2. 认真程度;

有如下行为者视情节轻重成绩将被降级直至重修:打游戏,看电影或其他无关事项。

3. 完成质量;

相同的课题,如果出现雷同的结果,将被降级。

4. 回答问题的水平;

对于完成的课题,如果不能解释,视同抄袭,成绩降级。

5. 实验报告

对于没有完成指定内容,或者雷同报告的,成绩降级。

特别的,对于完成内容超过题目要求或者有独特成果,给与成绩奖励。

2012-4-20

验收提示:

(根据最新的上级要求,做如下的通知)

5月18日: 验收日。在此之前,请大家完成准备工作(代码,必要的说明文档等)。验收时采用教师学生一对一方式进行,同学需要进行预约,并主动出示有效证件。为了提供良好的验收环境,非验收同学应在别处等候,不要围观,评论。验收老师会提问一些相关问题,请同学独立回答。学生也可能被要求进行现场的一些简单的功能改进。

对于上机时间没有达到最低要求的,取消验收资格。此数据来自计算机系统,请大家平时注意查询。

平时有问题,欢迎在教师值班时候来咨询。(见附表)

徐新:再创VC 篇6

本月劲爆:

2004年12月31日,是徐新在霸菱亚洲投资基金董事总经理和中国区总裁任职的最后一天。

2005年,对于这位被美国《商业周刊》评为亚洲25位最具有影响力的VC之一的“铁娘子”有了一个新的计划:自己寻找合伙人组建一个新的风险投资公司,然后准备从LP的手中募集到两亿美元的资金,关于这部分资金的使用,她现在已经有了一个明确的投资方向,就是投资中国内地的制造业,消费领域等。

徐新对自己运作资金的能力显得非常自信;快速的语速,让人无法质疑的论点,都成为她屡屡说服别人的必杀武器,但是她和其他的VC一样,更注重实际的投资回报而不是“看谁更能讲故事”。

在霸菱vc徐新工作了近7年,并一直负责该基金在中国的投资业务:先后在中国内地投资9家公司,现在已经有5家公司实现退出,并取得以6800万美元的投入获得1.21亿美元的收益成绩,随后的几家被投公司目前也发展得不错。

但是,这些成功的案例并没有让徐新满足。她期待着在2005年自己主导运作的风险投资基金中再次刷新投资回报的纪录。

贾志强另类VC

让所有的员工都过上好日子,是第一个企业老总的期望,吉富VC在短短的半年时间就实现了这个初步的设想。从这家风险投资公司的资金构成上看,贾志强更像是财富的代言人。

本月劲爆:

贾志强带领的深圳吉富创业投资公司(简称吉富VC)也许是最近在深圳市创业投资同业公会通过审核最为特殊的VC。

2004年1月21日,吉富VC与广发证券工会签订协议,后者将所持有的8429.18万股辽宁成大股权,以6327.87万元的价格转让给前者。这笔交易为吉富VC的账面贡献的利润不菲:截至辽宁成大第三季度财务报表显示,该公司每股净资产为2.3元,吉富VC收购辽宁成大的第股价格却仅为0.75元,相当于辽宁成大每股净资产的三分之一,仅这一笔交易,就为这个成立不到半年的吉富VC带来了上亿元的收入。

天上难有掉馅饼的好事,为何惟独砸中吉富VC?

从有关资料上显示,吉富VC注册资本为2.48亿元,共有2126名自然人股东,其前三名股东分别为广发证券总裁董正青,出资800万元,广发证券董事长王志伟出资430万元,广发证券副总裁李建勇出资318.8万元,前十大股东共计持有11.3%的股份。

据广发证券有关人士介绍,深圳吉富是在整个广发系统的员工中集资发起的,包括广发证券、广发华福、广发北方、广发基金及广发期货在内的5家公司的员工,均可认购深圳吉富的股份。当初,贾志强等原广发证券老员工在2004年8月份仓促成立的这家创业投资公司的目的就是为了和中信证券争夺广发证券的控股权,如今,中信证券早已偃旗息鼓,深圳吉富却仍然在证券市场并且越战越勇。

VC轧机板形控制技术的发展 篇7

1 冷轧板形缺陷与控制

所谓板形,就是轧制后带材所产生的波浪和瓢曲。实际上就是指板带材的翘曲程度。由于各种因素的影响,带材在辊缝中的纵向延伸方向往往是不均匀的。通过对板形进行检测进而实现板形自动控制,只有连续不断地、准确地将板形状况及时地反馈给控制系统,板形控制系统才能以此为依据向执行机构发出正确的调节指令,实现板形闭环自动控制。

2 控制板形问题的基本方法

2.1 HC轧机

在普通四辊冷轧机的基础上对HC轧机进行处理,通过在工作辊和支承辊之间设置可以进行轴向移动的中间辊,采用更小的直径的工作辊。主要特点是: (1) 中间辊的位置可根据板宽调整,可以减小工作辊的弯曲挠度和工作辊与支撑辊的弹性压扁,因此可以显著地减小带钢边缘减薄现象; (2) 中间辊的轴向移动在一定程度上减小了工作辊与支承辊的有害接触区,使有害接触区不再阻碍液压弯辊,液压弯辊的板形控制功能得到明显改善; (3) 采用了较小的工作辊直径,减小了轧制力和轧制力矩。

2.2 CVC轧机

CVC轧制采用S型轧辊,上下轧辊的辊型相反布置,调节轧辊的轴向位置可以获得不同的辊缝形状,以满足轧制带钢的板凸度和板形要求。CVC轧机的特点主要表现在: (1) 多组原始辊型不同的轧辊可以通过一组S型曲线轧辊进行代替,在一定程度上减少了轧辊的备用数量; (2) 通过调整无级辊缝进而适应不同产品规格的变化; (3) 辊缝调节范围大。

2.3 PC轧机

轧辊的成对交叉是PC轧机的主要特点。成对交叉是指相互平行的轧辊轴线,上工作辊与上支撑辊构成一对,下工作辊与下支撑辊构成另一对,通过交叉将这两对轧辊的轴线按照一定的角度进行布置。轧辊辊缝随着轧辊轴线的交叉而发生变化,离轧辊交叉线越远,辊缝就越大。PC轧机对板形进行控制,是通过改变轧辊轴线交叉角进而改变辊缝形状实现的,这是一种柔性的辊缝型。

3 VC轧机的特点与结构

3.1 特点

VC轧辊系统的特点主要有:通过降低支撑辊的换辊次数,在一定程度上减少了不同辊型的轧辊数量;对轧辊磨损及热辊形进行补偿;在进行带材轧制加、减速的阶段,对于轧制速度的变化引起的轧制力波动和轧辊凸度变化可以进行有效补偿;通过采用VC辊代替原有支撑辊,所以在线改造较为方便。

3.2 VC轧辊的结构

VC辊是一种组合式支承辊,由芯轴、套筒和旋转接头装配而成(如图1所示),在芯轴和套筒之间的辊身中心区域有一个油槽,槽内充以压力可变的高压油。辊颈两端的套筒均收缩,收缩接头用作内部压力油的外部密封件并用于轧辊传动装置的自由滑移转矩传输。

4 控制VC辊轧机板形的技术

根据图1所示,与普通实心辊相比,VC轧机由套筒与芯轴通过热装而成,其内部有一个可以进油的空腔。使得在轧制过程中,由于VC轧机内部油腔的存在,套筒在辊间压力作用下,一方面产生一个整体的挠度,另一方面在受力区域产生一个塌陷位移。

5 结语

综上所述,随着现代工业技术的不断发展,对冷轧带材的质量提出更高的要求,冷轧机的装备技术、控制水平在一定程度上向着更高层次发展,其最终目标是不断提高连续化率和质量,进而推广自动化。

参考文献

[1]程志彦.几种新型轧机的板形控制分析[J].机械管理开发, 2005, 200 (4) :36-37.

[2]刘妍.基于改善板形的带材拉伸弯曲矫直理论研究及其仿真[D].燕山大学, 2007.

[3]丁开荣.板形标准曲线的理论计算方法研究[D].燕山大学, 2006.

[4]白振华, 连家创, 杨杰等.可变凸度轧辊 (VC辊) 在不同油压下的凸度分布曲线[J].机械工程学报, 2002, 38 (6) :156-158.

[5]王国栋, 刘相华, 王君等.我国中厚板生产设备和工艺技术的发展[C].//首届宝钢学术年会论文集, 2004:150-157.

VC技术 篇8

人脸的肤色作为一种有效的特征已经在人脸识别和人手跟踪等许多应用中得到使用和证明。虽然不同的人有不同的肤色, 但经研究表明:这主要是由于肤色的亮度和色度之间存在差异造成的。

许多基于肤色不变性的人脸识别方法都是构建一个肤色模型。最简单的肤色模型是定义一个肤色像素的色调阈限, 用Cr, Cb标识值, 例如R (Cr, Cb) 是从肤色模型像素的实例中取值的。选用适合的阈 (Cr1, Cr2) 和 (Cb1, Cb2) , 如果一个像素 (Cr, Cb) 的值符合这个范围域内, 即Cr1<=Cr<=Cr2且Cb1<=Cb<=Cb2, 那么这个像素被认为是表示肤色的像素。基于Web Cam (Internet上的摄像头) 的人脸检测和跟踪技术的核心是人脸分析。人脸分析的任务包括人脸检测, 人脸识别和人脸跟踪。人脸检测是许多后期应用的预处理过程。有许多方法可以用于人脸检测, 这些方法可以分成四大类:

a.基于知识 (Knowledge-based) 的方法, 是基于规则的方法, 试图对人脸特征在直觉上建模。

b.基于特征不变性 (Feature invariant) 的方法, 是利用特征的不变性进行检测, 如比例、方位、灰度级和肤色等) 。

c.模板匹配 (Template matching) 的方法, 通过手工定义人脸的模板, 或者是脸部特征, 来与输入图像进行匹配。

d.基于外貌 (Appearance-based) 的方法, 通过机器学习的方法找到人脸。

通常, 人脸跟踪系统采用单一的一种检测技术来识别和跟踪人脸, 然而一种模态只适用于在某些特定条件下的跟踪, 因此在无约束的自然场景下总会有失败的情况。此外, 对于基于Web Cam的人脸检测和跟踪系统来说, 由于Web Cam所传输图像的质量和速度都不是很高, 因此对人脸检测和跟踪算法提出了更高的健壮性和实时性要求。此技术可以分为如下几部分:

a.利用Web Cam获取视频流;

b.人脸的检测 (包括从背景中确定人脸的存在, 以及验证检测到人脸是否是参加在线考试的人员) ;

c.人脸的跟踪 (在在线考试的过程中实时监控考试对象) 。

通过Web Cam和AVICap提供的视频采集函数来采集单帧的图像, 它是以32位真彩色的色彩实现方式存放的。图像中每个像素都是由3个字节24个二进制位来表示的, 每个字节 (8位) 代表一个不同的颜色分量。这三个分量依次是蓝色分量B、绿色分量G、红色分量R, 而这三个字节存储的实际内容就是这三个分量的值。根据存储单位的大小, 我们不难得出这三个分量的取值范围都是在 (0, 255) 之间, 其中三个分量的值全取0表示黑色, 全取255表示白色, 而其他颜色也可以通过对B、G、R三个分量取不同的数值来得到。这种被大多数图像格式所采用的彩色空间, 称之为RGB彩色空间。在RGB彩色空间中, 颜色的表达是由红、绿、蓝三种颜色按不同比例混合而成, 这样的表达方式并不能准确地反映出颜色本身的特征。因为, 人眼看到的任何一种彩色光都是彩色三要素:亮度 (Brightness) 、色调 (Hue) 、饱和度 (Saturation) 综合而成的效果。其中, 亮度是光作用于人眼时所引起的明亮程度的感觉, 它与被观察事务的发光强度有关;色度反映颜色的种类, 是当人眼看到一种或多种波长的光时所生产的彩色感觉, 它与光的波长有关, 是决定颜色的基本特征;饱和度是指颜色的深浅程度, 即各种颜色混入白光的程度。由此可见, 这三个要素才是对颜色本身最准确地诠释。而且, 据研究表明, 人的视觉对亮度细节的敏感程度远大于对色度细节的敏感程度, 此外, 经过统计证明, 不同人种, 不同环境下的肤色区别主要受亮度影响, 受色度影响较小, 可见, RGB彩色空间并不适合人类的视觉特征。因此, 我们完全可以选择更能突出颜色特征的彩色空间来分析人脸肤色和背景色, 并为人脸肤色建模。

人脸检测是指对于任意一副给定的图像, 采用一定的策略对其进行搜索以确定其中是否含有人脸, 如果是则返回一脸的位置、大小和姿态。人脸检测是一个复杂的具有挑战性的模式检测问题, 其主要的难点有两方面, 一方面是由于人脸内在的变化所引起:a.人脸具有相当复杂的细节变化, 不同的外貌如脸形、肤色等, 不同的表情如眼、嘴的开与闭等;b.人脸的遮挡, 如眼镜、头发和头部饰物以及其他外部物体等;另外一方面由于外在条件变化所引起:a.由于成像角度的不同造成人脸的多姿态, 如平面内旋转、深度旋转以及上下旋转, 其中深度旋转影响较大;b.光照的影响, 如图像中的亮度、对比度的变化和阴影等。c.图像的成像条件, 如摄像设备的焦距、成像距离, 图像获得的途径等等。这些都增加了Web Cam的技术难度。

人脸跟踪理论上说可以实现在Internet上的考试。然而, 由于不能解决在Internet上的身份认证, 该系统目前只能适用于在局域网中进行在线测试。可以设想, 如果有了基于Web Cam的人脸检测和跟踪技术, 我们就可以在此基础上实现考试过程中的身份认证和考试监控。

参考文献

[1]005VC基于WebCam的人脸检测技术.

[2]左飞.C++数据结构原理与经典问题求解[M].北京:电子工业出版社.

[3]张忠帅.VC++2008专题应用程序开发实例精讲[M].北京:电子工业出版社.

VC技术 篇9

随着信息技术的飞速发展和数据库技术的广泛应用,数据库中存储的数据种类愈加丰富。在多媒体技术日益成熟的今天,利用数据库存取图像数据,在社会各领域有着广泛的应用前景。

数据库图像存取主要有间接存取和直接存取两种方法。间接存取方法并不直接将图像存入数据库,而是在数据表中用专门字段存储图像文件的路迳和文件名,图像则以文件形式存放在指定的目录下,使用时根据数据库字段提供的信息找到所需图像文件并进行加载。这种方法使用相对比较简单,但由于图像与数据库分离,导致数据的安全性降低,数据存储的不同步也给系统维护、管理带来一定困难。直接存取方法是将图像数据存储在数据库关系表中,这样不仅可以保证图像数据的一致性和安全性,还可以提高图像数据的可用性和可伸缩性。图像数据存取将是图像数据库技术发展的主要方向。当前由于大多数据库系统并不提供对图像数据存取的支持,直接存取法的实现须借助第三方开发工具来完成。

2 图像字段的存储机制

存储在数据库中的数据有两种:格式化数据和非格式化数据。其中数字、字符为格式化数据;图形、图像、声音、视频等为非格式化数据,这是一种大容量的二进制数据(BLOB—Binary Large Object称为二进制大对象)存储类型,这种数据具有数据量大、处理复杂等特点。这两种格式的数据其存储方式完全不同,格式化数据直接存储在记录的字段中,可以输入、显示和编辑;作为非格式化数据的图像,存储时不是作为数据记录的一部分被存入字段,而是存储在系统专门开辟的存储页面中,其字段内存储的仅是一个16字节指针,它指向图像数据的实际存储位置。在数据表中,无法对这样的数据实施操作,如输入、编辑、显示等。因而,图像数据存取是数据库操作中的一个难点。

3 图像数据存取技术

3.1 ADO数据库访问技术

ADO是Microsoft数据库应用程序开发的新接口,是基于OLE DB模型之上的更高层应用。ADO用对象封装了OLE DB中所提供的接口,ADO的Field(域)对象对应于记录集对象中的一列,它提供了很多属性和方法(函数),但存取大容量的二进制数据(BLOB)主要用到GetChunk()和AppendChunk()两个函数。用ADO访问数据库,首先要创建连接(Connection)对象建立与数据源的连接,然后创建记录集(Recordset)对象,实现对数据库的访问。对于格式化数据,可用GetCollect()和PutCollect()函数读取和保存,从记录集中获取的数据值都是variant类型,使用时必须进行类型转换,保存时也必须先将数据转换成variant类型然后再写入。

3.2 BMP文件格式

BMP(位图)文件是Windows应用程序中使用较多的图形资源。BMP文件大体分为4个部分(如图1)。

第一部分为位图文件头BITMAPFILEHEADER,是一个长度固定为14个字节的结构体类型,其中数据成员WORD bfType用于指定文件类型,它的值必须为0x424D,即字符串“BM”,也就是说所有.bmp文件的头两个字节都是“BM”;DWORD bfSize指定文件大小,包括bfType的14个字节;DWORD bf OffBits表示从文件头到实际位图数据的偏移字节数。

第二部分为位图信息头BITMAPINFOHEADER,是一个长度固定为40个字节的结构体类型,用于指定与图像有关的信息,如图像高度、宽度、颜色位数等。

第三部分为调色板,它是一个用于描述像素颜色分量的结构体数组。

第四部分是实际的图像数据。

3.3 用VC++实现图像数据存取

以下结合本人开发的“高校人事信息管理系统”,说明应用程序中存取数据库图像的实现方法。系统开发工具为VC++6.0,用Access 2003数据库存放人事信息数据,采用ADO方式连接数据库。系统的“人员简历管理”模块,可添加、删除、修改、查找、显示个人简历,通过拖动滚动条,可实现简历表的上下、左右滚动(如图2)。简历表中的人员照片,涉及到图像数据的存储、读取和显示。

3.3.1 图像存入数据库字段

在数据库的pj1表中,有一个“photo”字段,其属性设置为“OLE对象”类型,用于存放图像数据。BLOB对象的保存需调用AppendChunk()函数,AppendChunk()包含在Field对象中,原型为:HRESULT AppendChunk(const_variant_t&Data);其中Data为要写入的数据,从函数原型看出,存入图像的关键是要将字符类型的BMP数据转换VARIANT类型。具体做法是:从磁盘读取BMP文件并加载到内存缓冲区后,用SafeArrayCreate()函数创建一个SAFEARRAY结构体类型的安全数组,通过函数SafeArrayPutElement()将缓冲区数据写入该安全数组,再将数组值赋于VARIANT类型的变量,最后通过调用AppendChunk()函数,将图像数据存入“photo”字段。下列savephoto()函数中给出了保存BMP图像到数据库字段的关键代码。

3.3.2 读取数据库中的图像

读取“photo”字段中的BLOB数据,要用到Field对象的GetChunk()函数,该函数原型为:_variant_t GetChunk(long Length);调用函数时需给出“photo”字段中BLOB数据的实际长度,通过访问Field对象的ActualSize属性取得图像数据长度,GetChunk()函数被调用后,返回的数据值为VARIANT类型,这种类型的数据无法用于图像显示,为此调用SafeArrayAccessData()函数,可获得VARIANT变量中指向数据的char*类型的指针,然后将数据库中读取的数据复制到指定的内存缓冲区,以方便对其作进一步处理。下列Readphoto()函数给出了读取数据库中BLOB数据的关键代码。

3.3.3 图像显示

用GetChunk()读取的位图数据驻留在内存缓冲区,将这些数据转换成位图句柄HBITMAP后才可显示。具体过程为:取缓冲区中的位图文件头,依据BMP文件格式规定,判断开头的两个字节是否为“BM”,以此确定它是否为位图;从bfOffBits获取文件头到实际位图数据的偏移字节数,计算出实际位图数据的存放位置;调用CreateDIBitmap()函数,读缓冲区数据并创建设备相关位图DDB以供显示。函数BufToHbit()中给出了实现这一转换的关键代码。

图像数据读出并转换成位图句柄后,在ShowUserPhoto函数中将位图句柄输出到屏幕,然后在视图类的OnDraw()函数中调用它即可。

4 结语

数据库图像存取是一项比较复杂的技术,具有重要的实用价值和广泛的应用前景。用VC++存取数据库图像数据,主要使用了ADO的两个函数:AppendChunk()和GetChunk(),函数原型中涉及到VARIANT和_variant_t这两种数据类型,其中VARIANT是一个结构体类型,其内包含的联合体成员可用于存储各种类型的数据和指向各种数据类型的指针,用VARIANT定义的变量,在使用时应转换成所需类型;_variant_t是一个类,它封装了VARIANT结构。用:AppendChunk()函数写字段时,内存中的图像数据必须转换为VARIANT类型,这需借助于SAFEARRAY结构类型的安全数组;用GetChunk()函数读取图像字段后的返回值,也是VARIANT结构类型,需转换为位图句柄HBITMAP后方可显示于屏幕。

参考文献

[1]李鲲程.Visual C++打印编程技术与工程实践[M].北京:人民邮电出版社,2003.

[2]李博轩.Visual C++6.0数据库开发指南[M].北京:清华大学出版社,2001.

[3]萨师煊,王珊.数据库系统概论.第3版[M],北京:高等教育出版社,2000.

[4]希望图书创作室译.Visual C++6.0技术内幕.第5版[M],北京:希望电子出版社,2002.

VC技术 篇10

1.1 ODBC

ODBC (Open Database Connectivity, 开放数据库互连) 是微软公司开放服务结构 (WOSA, Windows Open Services Architecture) 中有关数据库的一个组成部分, 它建立了一组规范, 并提供了一组对数据库访问的标准API (应用程序编程接口) 。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持, 用户可以直接将SQL语句送给ODBC。一个完整的ODBC由下列几个部件组成:应用程序 (Application) 、ODBC管理器 (Administrate) 、驱动程序管理器 (Driver Manager) 、ODBC API、ODBC驱动程序和数据源。ODBC只提供单一的API, 可用于处理不同数据库客户应用程序。使用ODBC时我们可以不关心具体的数据库管理系统的细节, 而只需要提供相应类型数据库的ODBC驱动程序, 就可以实现对该数据库的访问。

作为一种数据库连接的标准技术, ODBC有如下几个特点:

(1) ODBC是一种使用SQL的程序设计接口;

(2) ODBC的设计是建立在客户机/服务器体系结构基础之上的;

(3) ODBC的结构允许多个应用程序访问多个数据源, 即应用程序与数据源的关系是多对多的关系;

(4) ODBC减少了应用程序开发者与数据源连接的复杂性。

另外, ODBC使用层次的方法来管理数据库, 在数据库通信结构的每一层, 对可能出现依赖数据库产品自身特性的地方, ODBC都引入一个公共接口以解决潜在的不一致性, 从而很好地解决了基于数据库系统应用程序的相对独立性, 这也是ODBC一经推出就获得巨大成功的重要原因之一。

1.2 MFC ODBC

MFC ODBC的本质是ODBC, 只是Visual C++中提供了MFC ODBC类, 封装了ODBC API, 这样使得程序的编制更为方便, 只需了解该类的一些属性和方法就可以访问数据库了, 而无需了解ODBC API的具体细节。目前大部分的ODBC开发都使用MFC ODBC。Visual C++的MFC类库定义了几个数据库类, 在利用ODBC编程时, 经常要使用到CDatabase (数据库类) , CRecord Set (记录集类) 。其中CDatabase类对象提供了对数据源的连接, 通过它你可以对数据源进行操作;CRecord Set类对象提供了从数据源中提取出的记录集。

应用ODBC编程可以应用App Wizard来建立一个ODBC的应用程序框架, 也可以直接使用ODBC来进行数据库编程。应用ODBC编程写应用程序时, 不应直接使用CRecord Set类, 而必须从CRecord Set类产生一个导出类, 并添加相应于数据库表中字段的成员变量。随后, 重载CRecord Se类的成员函数Do Field Exchange, 该函数通过使用RFX函数完成数据库字段与记录集域数据成员变量的数据交换 (DDX) 机制相类似, 负责完成数据库与成员变量间的数据交换。

1.3 DAO

DAO (Data Access Object) 数据访问对象, 是允许程序员操作Microsoft Jet数据库引擎的一个面向对象的接口。JET数据库引擎是一种用来访问Access和其他数据源记录和字段的技术。DAO在许多方面都可以说是ODBC的一个超集, 它包括了ODBC类的绝大部分功能并且新增了自己的许多功能。DAO支持以下几种数据源:

(1) Microsoft Jet型数据库文件, 即基于微软的-mdb类型数据库的数据库应用程序, 该数据库是通过Access生成的。

(2) DAO可对ODBC数据源进行操作, 但性能并不是很好, 可以选择使用ODBC Direct。ODBC Direct可以直接访问ODBC数据源, 而不是通过JET引擎。

(3) ISAM型 (索引顺序访问方法) 数据源, 包括Dbase、FoxPro、Paradox、Excel或文本文件。

使用DAO技术可以使我们方便地访问Microsoft Jet引擎数据库, 由于Microsoft Jet不支持多线程, 因此, 必须限制调用到应用程序主线程中的所有DAO。

1.4 OLE DB

OLE DB是Visual C++开发数据库应用中提供的新技术, 它基于COM技术, 由一套通过COM访问数据源的Active X接口组成。OLE DB包括客户和服务器两部分。其中, 客户指任何一个使用OLE DB接口的系统或者应用程序, 包括OLE DB本身;而服务器是指所有提供OLE DB接口的软件组件。由于OLE DB对所有的文件系统包括关系数据库和非关系数据库都提供了统一的接口, 使得OLE DB可以在不同的数据源中进行转换。利用OLE DB, 客户端的开发人员在进行数据访问时只需把精力集中在很少的一些细节上, 而不必弄懂大量不同数据库的访问协议。

与ODBC技术相似, OLE DB属于数据库访问技术中的底层接口。直接使用OLE DB来设计数据库应用程序需要大量的代码。在VC中提供了ATL模板, 用于设计OLE DB数据库应用程序和数据提供程序。利用ATL模板可以很容易地将OLE DB与MFC结合起来, 使数据库的参数查询等复杂的编程得到简化。MFC提供的数据库类使OLE DB的编程更具有面向对象的特性。

Visual C++所提供用于OLE DB的ATL模板可分为数据提供程序的模板和数据使用程序的模板, 使用ATL模板创建数据库应用程序一般有以下几个步骤:

(1) 创建应用框架;

(2) 加人ATL产生的模板类;

(3) 在应用中使用产生的数据访问对象;

(4) 利用ATL产生OLE DB数据使用程序。

1.5 ADO

ADO是Active X数据对象 (Active X Data Object) , 这是Microsoft开发数据库应用程序的面向对象的新接口, 是一种特殊的OLE DB客户程序。ADO访问数据库是通过访问OLE DB数据提供程序来进行的, 它提供了一种对OLE DB数据提供程序的简单高层访问接口。ADO技术是基于OLE DB的访问接口, 它继承了OLE DB技术的优点, 并且, ADO对OLE DB的接口作了封装, 定义了ADO对象, 使程序开发得到简化。ADO技术基于通用对象模型 (COM) , 它提供了多种语言的访问技术, 同时, 由于ADO提供了访问自动化接口, 所以, ADO可以用描述的脚本语言来访问VBScript、VCScript等。ADO支持客户/服务器模式和基于Web的数据操作, 尤其支持通过客户服务器模式或基于Web模式访何SQL Server数据库服务器。

使用ADO对象开发应用程序也类似其它技术, 需产生与数据源的连接, 创建记录等步骤, 但与其它访问技术不同的是, ADO技术对于对象之间的层次和顺序关系要求不是太严格。在程序开发过程中, 不必先建立连接, 然后才能产生记录对象等。可以在使用记录的地方直接使用记录对象, 在创建记录对象的同时, 程序自动建立了与数据源的连接。这种模型有力地简化了程序设计, 增强了程序的灵活性。

2 几种数据库访问技术的比较

ODBC的最大优点是能以统一的方式处理所有的数据库。ODBC类对可以访问提供了ODBC驱动程序的任何关系型数据库, 且使用简单, 但是不支持非关系型数据库。ODBC访问数据需要登陆数据源, 所以对数据库的访问速度慢, 同时ODBC的使用需要很多部件的支持, 这使得当从一个系统移植到另一个系统时, 不但需要重新注册数据源, 而且要移动很多部件。

DAO类与ODBC类相比具有很多相似之处。首先, 二者都支持对各种ODBC数据源的访问。虽然二者使用的数据引擎不同, 但都可以满足用户编写独立于DBMS的应用程序的要求;其次, DAO提供了与ODBC功能相似的MFC类, 它们的大部分成员函数都是相同的。

DAO也可访问ODBC数据源, 但性能不是很好。DAO最适合访问基于Microsoft Jet型数据库, 同时使用DAO不需要登录数据源。

另外, 从Visual C++.NET起, Visual C++环境和向导不再支持DAO (尽管包括DAO类并且还可以使用这些类) 。Microsoft建议对新项目使用OLE DB模板或ODBC。DAO只用于维护现有的应用程序。

ODBC是通过一套DLL驱动程序来实现的, 而DAO是通过OLE对象来实现的。一般地讲, DAO类提供了比ODBC类更广泛的支持。一方面, 只要有ODBC驱动程序, 使用Microsoft Jet的DAO就可以访问ODBC数据源。另一方面, 由于DAO是基于Microsoft Jet的引擎的, 速度比ODBC快。Microsoft Jet本身的数据格式为MDB, 因而在访问Access数据库时具有很好的性能, 但在访问其它类型数据库时, 效率不是很高。

ODBC要依赖于数据库制造商提供的驱动程序来完成数据库访问工作, DAO可直接利用Jet数据库引擎访问数据库, 所以速度比ODBC快。

ADO提供了访问各种数据库的统一手段, 它可以处理任何类型的数据。ADO既可以应用于关系数据库, 也可以应用于非关系数据库。由于ADO是基于组件对象模型 (COM) 的访问技术, 所以用ADO产生的应用程序具有COM组件的优点, 运行效率高, 便于使用和管理以及占用内存少。ADO具有访问数据库的高速性, 克服了ODBC数据访问的慢速。

ADO的另一个功能是远程数据访问 (RDS) , 能够通过一个往返传输将数据从服务器移动到客户端应用程序或Web页中, 然后在客户端对数据进行操作, 最后将更新数据返回服务器。

3 数据库访问技术的选择

开发数据库应用时, 恰当选择访问数据库的技术是很必要的。数据库访问技术的确定与应用的规模、操作的层次、数据的分布能力以及选择的数据库系统等因素有关。

通常选择了数据库, 就将数据库访问技术限制到一个小的选择范围。例如我们选择使用微软的SQL Server 7.0数据库系统, 这时我们只能通过ODBC或者通过DAO、OLE DB、ADO访问数据库, 而不能采用DAO, DAO虽然也可以通过ODBC访问SQL Server, 但是效率非常低下, 通常很少会用到它。

选择ADO (OLE DB) 或MFC ODBC (ODBC) 时, 有几条一般的规则:如果要访问支持ODBC的数据库, 而该数据库又在不支持OLE的服务器上, 那么只有选用ODBC;对支持OLE的服务器来说, 应首先考虑使用ADO (OLE DB) , 除非有现成的ODBC驱动程序可供利用;ODBC在处理SQL时能力较强。处理非SQL数据库时, ADO (OLE DB) 则具有非常明显的优势;对于访问量很大的数据库服务器以及要求访问速度较快的情况, 应使用ADO (OLE DB) ;如果需要可互操作的数据库部件, 那么只有选择ADO (OLE DB) 。

摘要:随着计算机技术的发展, 数据库技术迅速地兴起。而VC++作为众多编程语言中较为突出的一种, 对于数据库访问技术的支持应该是最为全面的。讨论了当前流行的几种数据库访问技术:ODBC, MFCODBC, DAO, OLED BandADO。在叙述了这些技术各自的原理和结构体系后, 对这些技术的特点和性能作了集中的比较, 并给出了如何在不同情况下选用这些技术的一般原则。

关键词:数据库访问技术,ODBC,ADO,DAO

参考文献

[1]朱晴婷.Visual C++程序设计[M].北京:清华大学出版社, 2003.

[2]杨永国.Visual C++6.0实用教程[M].北京:清华大学出版社, 2002.

[3]夏文庆.Visual C++数据库高级编程[M].北京:北京希望电子出版社, 2004.

[4]邱仲潘.Visual C++从入门到精通[M].北京:电子工业出版社, 2005.

[5]姚万军.VC下利用ADO访问SQL Sever技术[J].微计算机应用, 2004 (1) .

水果VC不能替代蔬菜 篇11

25%—35%的酒精物理降温用

对高热病人,在服用退烧药效果不明显时,通常选择酒精擦浴来降温。擦浴时应该用含量为25%—35%的酒精,擦拭四肢及血管丰富的腋下、腹股沟、颈部、前额等部位,可使局部血管扩张、皮肤发红,加速血液循环以利散热;且酒精挥发时也会带走热量利于降温。

中医保养耳朵法—鸣天鼓

用掌心的劳宫穴(微握拳,中指所指之处就是劳宫穴)贴住耳孔,手掌搭在后脑勺上。食指放在中指上,往下弹拨,弹几次再压紧耳孔,再突然放松。反复几次后耳朵就会有特别清爽的感觉。

孕妇内衣选购原则

首先视自身的外型改变来考虑需求;多询问有经验的亲朋好友,她们是过来人,有第一手的经验和资讯。市面上的孕产妇用品种类多、品牌杂,有些商品的功能过于夸大,因此必须多了解、多比较,才能买到自己最需要的用品;材质重于外观。内衣的材料、质地需要把握吸汗、舒适的原则。

给牙齿补充营养

给牙齿补钙 牙骨疏松容易导致牙龈炎,多吃富含钙质的食物,可强化骨骼,预防牙龈炎和牙周炎的发生。

戒烟酒 烟和酒会降低人体的免疫力,流失维持口腔健康所需的维生素及矿物质,要想拥有健康的牙齿,必须戒烟和酒。

多吃生的蔬菜 生的蔬菜含有很多纤维素,能帮助清洁,对牙齿及牙龈产生有益刺激,防止牙龈炎。

补充营养素 如维生素A、B族维生素、维生素C及锌,预防感染、治疗炎症,防治牙龈出血。

解决便秘有妙招

若想大便通畅,必须要有规则正常的生活及运动,并要养成规则性的排便习惯,尽量不要依赖药品来治疗便秘,优化食物的摄入才是根本。

1.选择高纤维食物。

2.早起马上喝一大杯温开水,再稍微按摩腹部。

3.可沿肚脐周围作环形按压,有助于排便。每天定时去厕所,养成定时排便的习惯。

VC技术 篇12

STEP标准 (STandard for the Eexchange of Product model data, 产品模型数据交换标准) 是国际标准化组织制定的描述整个产品生命周期内产品信息的标准, 代号ISO 10303[1,2]。

STEP标准由5部分组成:描述方法 (Description Methods) 、实现方法 (Conformance Testing) 、集成资源 (Integrated Resource) 、应用 (Application) 、一致性测试 (Conformance Testing) 。

描述方法的核心是EXPRESS (ISO 10303-11) [3]。EXPRESS是一种面向对象的非编程语言, 用于信息建模, 既能为人所理解, 又能被计算机处理。EXPRESS主要用来描述应用协议或集成资源中的产品数据, 使描述规范化, 它是STEP中数据模型的形式化描述工具。

STEP提供了4种数据交换的实现方法:中性文件、标准数据存取界面 (SDAI) 、数据库实现和知识库实现[4~7], 每一种方法都能完成对产品数据的存贮、访问、传送和存档。中性文件交换方法利用显式正文或二进制编码, 提供对应用协议中产品数据描述的读和写。交换结构的纯正文本编码 (ISO 10303-21) 定义了标准中性文件格式, 通过这一中性文件实现产品数据的传输与交换。中性文件是当前最普遍的基于STEP标准的数据表达和交换方式, 大多数CAX软件都支持中性文件格式, 如:Pro/E、UG、CATIA等。

2 基于AP203协议的中性文件结构

头文件段依次由文件描述 (FILE-DESCRIPTION) 、文件名称 (FILE-NAME) 和文件规划 (FILE-SCHEMA) 三个实例组成。FILE-DESCRIPTION的属性为中性文件内容的非正式描述和文件要求的后处理器层次。FILE-NAME的属性定义与中性文件有关的数据, 如文件名、时间标记、作者、组织、实施的STEP版本等。FILE-SCHEMA属性给出数据段中实体实例应用的模式。

数据段由一系列实体实例定义语句组成。每个语句遵循统一的格式为:

#实体实例标号=实体类型 (属性1, 属性2, ……) ;

其中:“#实体实例标号”为实体实例名, 是由系统产生的该实体实例的唯一标识符, 实体实例标号为系统随机产生的整数;“实体类型 (属性1, 属性2, ……) ”由EXPRESS描述的实体的显式属性、子类/超类说明等映射而来。“实体类型”为集成通用资源中描述的具有相同特性的物理或概念对象的集合, 如:CARTESIAN_POINT、CIRCLE、CLOSED_SHELL等。属性表示了实体的基本特性, 属性可以是数值、字符串、三坐标点、已定义实体的引用、真假值 (.T.或.F.) 等, 每个属性值以逗号隔开。“;”表示语句的结束。

3 中性文件实现数据交换的方式

EXPRESS是一种面向对象的非编程语言, 有强大的描述信息模型的能力, 用于信息建模, 保证对产品描述的一致性, 防止二义性, 容易被人们理解和掌握, 但不能被程序直接使用。

STEP标准是基于EXPRESS语言的标准体系, 通过一种不依赖具体系统的中性机制, 实现产品全生命周期的信息表达和产品数据交换和共享。

中性文件是STEP标准提供的、最常用的一种产品数据交换实现形式, 其标准号为ISO10303-21。中性文件是由产品数据的EXPRESS描述变换而来的数据表达, 以一套清晰的文本编码实现无二义性的、上下文无关的、便于软件解释、可独立于专门应用的产品信息描述。

C++语言是一种面向对象程序设计语言, 是最常用的CAX应用软件开发平台, 以其独特的语言机制在计算机科学的各个领域中得到了广泛的应用。

CAX系统之间的数据交换与共享通过前、后处理器和STEP中性文件实现。前、后处理器完成基于STEP标准的产品数据模型、中性文件数据模型和C++数据模型之间的映射, 从而实现不同CAX系统之间的产品数据的交换与共享。

CAX系统之间通过4层结构实现产品数据的交换与共享, 如图1所示。其中, 第1层为物理层, 通过基于EXPRESS语言的中性文件实现产品数据的表达;第2层为接口层, 通过前处理器、后处理器实现中性文件与应用系统之间的数据交互;第3层为应用协议层, 通过选用统一的STEP应用协议, 实现不同系统间产品数据的一致表达;第4层为应用程序层, 包括成熟的通用软件和用户自己开发的应用软件。

C A X应用系统根据S T E P标准的应用协议 (AP203、AP214) , 通过前处理器, 将产品数据转化为中性文件格式;其它CAX系统通过后处理器读取中性文件, 还原产品的数据, 实现CAX系统之间的数据交换与共享。现有通用软件多支持AP203和/或AP214协议。Intergraph公司正在致力于使EM SSTEP支持AP202和AP209协议。AP203是用于产品三维形状设计的“配置控制设计”、AP214是用于汽车三维设计的“自动化机械设计过程的核心数据”、AP202是“相关绘图”、AP209是“复合材料和金属结构分析以及相关的设计”。

通用软件内置了前处理器, 实现将所设计产品输出为中性文件格式。用户只需设计相应的后处理器, 即可读取中性文件信息, 实现基于通过软件平台基础上的专用程序的开发和应用。后处理器设计包括:EXPRESS/中性文件/C++数据类型映射, 如表1所示;STEP-AP203实体定义/C++类定义/中性文件实体实例/C++类对象映射, 如表2所示。由于受篇幅所限, 此处仅以advanced_face和closed_shell两个实体为例, 说明如何实现该映射;基于EXPRESS的STEP-AP203实体与C++类继承关系映射, 如图2所示。针对AP203定义的实体, 构建与之对应的C++类, C++类名为“C”+“实体名”。

4 系统功能模块

EXPRESS实体与VC++类映射模块、文件读取模块、词法分析模块、VC++对象定义模块、特征识别模块、图形重构模块。

文件I/O模块:读入指定位置的中性文件, 进行预处理, 如:删除文件中多余的空格、回车、换行符等, 以便后续的逐行读取、分析文件;将分析得到的信息以合适的数据存储格式保存在输出文件中, 以备应用程序的读取。

词法分析模块:逐行读入并分析读入的中性文件数据, 根据中性文件中实体实例的表示形式, 提取实体实例信息, 并保存在数组中。

VC++对象定义模块:利用C++中的条件分枝语句, 调用已定义的与“返回值”相对应的“类”定义“对象”, 其中“对象”名为“实体实例名”、“对象”成员变量的值为“实体实例”属性值。“实体类型数组”是根据生成中性文件的CAX系统所遵循的STEP应用协议 (如:AP203、AP214等) 中所规定的实体类型而定义的。

特征识别模块:根据得到的VC++对象树, 利用属性邻接图 (AAG) 的特征识别方法进行机械零件制造特征的识别, 得到用户程序关心的关键参数。

图形重构模块:利用Open GL提供的相应库函数对读入的中性文件数据进行可视化。

本文主要进行“词法分析模块”和“VC++对象定义模块”的研究。

5 程序流程

1) 打开指定位置的中性文件 (*.txt) 。定义关键字数组char*key[]和分隔符数组char*limit[]。

2) File Init () 初始化函数。对原始中性文件做简单的处理, 取消原txt文件中的空格、回车、换行符等。根据中性文件的特点, 将处理后的文件保存成两个文件:头段文件 (Header.txt) 和数据段文件 (Data.txt) 。

3) Read Line (int i) 读入第i行数据函数。该函数读入指定txt文件的第i行数据。此处读入的是2中生成的Data.txt文件, 行标志符是中性文件的语句结束标志“;”。

4) Line Scan (int i) 提取行信息函数。行信息以“#”开始, 以“;”结束, 分隔符有“#、=、 (、) 、, ”。提取“=”之前的“#实体实例标号”;提取“=”与“ (”之间的“实体类型”;提取由“ (”、“, ”、“) ”分隔的“属性1、属性2……”;将提取的信息保存在一个2维串数组的第“i”中 (i=“实体实例标号”的数值) , 该行第1个元素为“#实体实例标号”, 第2个元素为“实体类型”, 依次为“属性1, 属性2, ……”。将得到的“实体类型”与char*key[]中元素进行对比, 返回其在数组中的位置。

5) 变量赋值。提取“=”之前的“#实体实例标号”赋值给, 提取“属性1、属性2……”分别赋值给string instance Att[1]、string instance Att[2]……。

6) Makeobject (int i) 类实例化函数。根据得到的“实体类型”在char*key[]中位置值i, 定义与“实体类型”对应的C++类的对象, 用string instance Name作为对象名, 用string instance Att[1]、string instance Att[2]……的值为对象的成员变量赋值。

7) 循环执行, 到最后一句。

6 结论

STEP标准是实现产品全生命周期数据跨系统、跨平台传输与共享的国际通用标准;EXPRESS语言是STEP数据模型的形式化描述工具;中性文件是STEP标准提供的、可独立于专门应用的一种产品数据交换实现形式;VC++语言是最常用的CAX应用软件开发平台。本文所确立的基于中性文件的CAX系统集成层次结构和所建立的EXPRESS/中性文件/C++之间的数据类型映射、STEP-AP203实体/C++类/中性文件实体实例/C++类对象之间的映射、STEP-AP203实体/C++类继承关系映射是实现基于STEP和VC++的CAX系统集成的理论基础。

参考文献

[1]Michael J.Pratt.Introduction to ISO 10303-the STEPStandard for Product Data Exchange[J], American Societyof Mechanical Engineers, 2001, 1:102-103.

[2]ISO.ISO 10303-1O verview and fundamenta lprinciples[S].International Standard, Geneva:ISO TCl84/SC4, 1994-12-15.

[3]ISO.ISO 10303-11 Description methods:T h eEXPRESS language reference manual[S].InternationalStandard, Geneva:ISO TCl84/SC4, 2003-7-21.

[4]ISO.ISO 10303-21 Implementation methods:Clear textencoding of the exchange structure[S].InternationalStandard, Geneva:ISO TCl84/C4.1994.12-15.

[5]ISO.ISO 10303-22 Implementation method:Standarddata access interface specification[S].InternationalStandard, Geneva:ISO TCl84/SC4, 1998-12-15.

[6]ISO.ISO 10303-23 Implementation method:C++languagebinding to the standarddataacces sinterface[S].International Standard, Geneva:ISO TCl84/SC4, 2000-12-21.

上一篇:数字积分下一篇:科学管理与公共管理