VC++6.0平台

2024-07-29

VC++6.0平台(通用3篇)

VC++6.0平台 篇1

0 引 言

随着计算机技术和现代通信技术的发展,人类已经步入以数字化和网络化为特征的知识经济时代。传统的通信模式如电话线路其成本高而且可视化的程度不如网络通信。随着网络的普及,网络通信的优势已经逐步显现,将成为未来人们通信的一种重要的方式[1]。

VC++6.0是一种面向对象的计算机程序设计语言,其界面友好,功能强大,可移植性好,广泛应用于各个行业,它既支持面向过程的程序设计,也支持面向对象的程序设计,适合大中小型的项目开发,因此本系统采用VC++6.0进行开发设计[2]。

利用VC++6.0的MFC设计网络通信,已经成为一种主流的设计方案,伴随着以太网的逐步发展,基于VC++6.0的网络通信可以有助于人们之间的信息交互,在未来的发展中将会得以进一步的成熟和完善。

1 软件系统总体设计流程

网络通信是人与人之间通过网络资源进行信息交流与传递。局域网中最常用的有3个网络协议:MICROSOFT的NETBEUI、NOVELL的IPX/SPX和交叉平台TCP/IP,由于只有TCP/IP允许与Internet完全地连接,所以本系统采用TCP/IP协议[3]。

在通信的过程中,位于局域网中的客户端可以与IP网络相连,通过VC++6.0内置的IP控件实现端与端之间的信息交互。网络整体架构如图1所示。

本系统包括即时通信模块和文件传输模块。采用基于对话框的MFC设计,基于事件触发的思想,界面设计包括基于VC的网络通信设计总界面、私聊界面和用户设置界面,其中总界面通过按键可以实现选择文件传送还是聊天功能,这些功能通过手动触发实现。系统总体设计流程如图2所示[4]。

2 系统设计思想

2.1 聊天功能设计思想

本系统设计的聊天功能主要是基于UDP协议的通信,采用Socket接口,所谓Socket通常也称作“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答网络请求。Socket是建立网络连接时使用的,在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话,是TCP/IP网络的API[5]。

Socket有流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式Socket是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。在本系统中采用基于UDP的数据报式Socket。下面简要分析两者的优缺点[6]。

TCP协议基于三次握手机制,可以保证数据的安全性,顺序进行数据传输,但是TCP必须创建并且保持一个连接,这给系统增加了开销,而UDP协议尽最大可能进行保温传送,所以有效性远远不如UDP协议,因此一般的即时通信中都采用UDP协议,本系统采用了基于UDP协议设计聊天程序[7]。

聊天的创建程序如下:

wVersoinRequested = MAKEWORD(1,1);

m_socket=socket(AF_INET,SOCK_DGRAM,0); //创建一个UDP套接字

if(INVALID_SOCKET==m_socket)

{

MessageBox(″套接字创建失败!″);

return FALSE;

}

retval=bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR)); //绑定

if(SOCKET_ERROR==retval)

{

closesocket(m_socket);

MessageBox(″绑定失败!″);

return FALSE;

}

2.2 文件传输功能设计思想

文件传输协议是一个用于不同的主机之间进行文件传送的协议标准,用来实现文件之间的共享、鼓励间接或者隐式地使用远程计算机、向用户屏蔽不同主机中各种文件存储系统的细节和进行可靠及高效地传输数据。在本系统的设计中采用TCP协议实现了文件的可靠传输与不同主机之间的资源共享[8]。

FTP有主动和被动两种模式。主动模式下有客户端和服务器端,并要求二者同时打开并监听端口,是一种面向连接的传输;被动模式下只要求服务器产生意见监听端口的进程,这样程序的运行就可以绕过防火墙。所以在本设计中采用了被动模式[9]。

文件传输的主程序设计如下:

IPselect=m_listIP.GetItemText(n,0); //获取选中的IP

CFileDialog fileDlg(TRUE); //文件对话框为打开

if(IDOK == fileDlg.DoModal()) //如果按确定按钮

{

CString filename=fileDlg.GetFileName();

CFile fileOpen;

if(!fileOpen.Open(fileDlg.GetPathName(),CFile::modeRead | CFile::typeBinary))

{

AfxMessageBox(″无法打开文件″, MB_OK | MB_ICONERROR);

return;

}

int len=fileOpen.GetLength();

char* data = new char[len];

fileOpen.Read(data,len); //读入文件内容

char *cc=new char[10000];

memset(cc,0,10000);

sprintf(cc,″%d%s%s%d%s%d%s%s%s″,strlen(IPselect),″文件″,IPselect,len,″@″,

filename.GetLength(),″@″,filename,data);

senddata(cc);

fileOpen.Close();

MessageBox(″文件发送完成!″);

}

3 各功能模块的设计

系统的界面分为总界面设计,私聊界面和用户设置界面三大部分,三部分分别执行相应的功能,下面逐步进行介绍。

3.1 总界面设计

该模块是整个系统的基础模块,它负责初始化整个应用程序,首先初始化套接字,并接收和发送各种消息信息,然后根据收到的信息进行判断该执行什么功能,进而建立应用进程。在该界面的设计当中为了使用户方便进行操作,建立了一个包含用户的IP地址和主机名的IP地址列表。在该界面的右侧是群聊窗口可以向所有的用户发送数据,并接收其他用户发来的消息。

为了方便用户操作,最右侧是一个该系统的介绍,最下面的几个按钮是方便用户进行功能选择所建立的,从而使该系统看起来比较直观。

3.2 用户设置界面设计

在该系统的通信过程中,如果靠记忆用户的IP地址来进行通信,容易使人烦躁,所以增加这个模块,来使该系统更加地人性化。在软件的使用中可以先进行通信获得其他用户的信息后,点击设置按钮来更改主机名,也可以修改自己的主机名。通过这两种方式可以让用户更加自主地设计主机名,并且方便用户识别自己的信息。

在该界面中包含自己的IP地址、所在的IP网段和主机名三部分,用户可以自主修改。修改后在主界面中就会显示用户信息了。

3.3 私聊界面设计

该模块可以和指定的用户进行聊天。可以通过选中IP列表中的用户信息单击进行私聊,但是用户不能和自己进行聊天,聊天的内容不会被其他用户看到。

在该程序设计中,应用了UDP协议,界面中安置了三个按钮:清空、发送、关闭,从而方便用户进行操作。该系统运行时,当一方退出程序,就会通知另一方,并把聊天记录存于指定的文本中,如果该文本已经存在,则把聊天记录插到该文本的后面,并保存该记录,方便用户日后进行查看。

3.4 刷新模块设计

该模块可以手动进行刷新用户信息,可以解决网络不同步带来的IP地址列表不能及时更新的问题,单击刷新按钮,系统会清空自己的IP地址列表,并向局域网发送自己的IP主机名和地址信息,其他用户收到后会恢复自己的IP地址和主机名,然后系统会更新自己的IP列表,从而达到网络的同步功能[10]。

3.5 发送文件模块设计

该模块可以向指定的用户发送文本文件。用户可以选中IP列表中的用户,单击发送文件按钮,把要发送的文本文件发送给指定的用户,对方接收后,会提示进行保存处理。

4 系统功能测试

私聊界面可以通过点击私聊开启,当编写完要发送的数据时点击发送即可,点击关闭按钮会弹出提示框,询问用户是否要退出该进程,如图3所示。

文件传送功能的使用,首先选择完用户后,单击文件传送,会弹出如图4所示的界面要求用户选择要传送的文件,在接收端,则要求用户选择存放的位置。

颜色的设定,由于不同的人有不同的喜好,所以增加该模块来方便用户设置背景颜色,如图5所示。

5 结 语

本文给出了一种基于UDP和FTP协议的网络通信设计方案,实现了基于UDP的即时通信和基于FTP协议的文件传输。本设计最大的优点是操作直观,可靠性高,文件传送中几乎不会发生数据的丢失。其主要缺点是没能实现视频的通信,其功能还不够全面,但是在一些小型的局域网中,由于其占用内存少且无需安装,因而有广泛的实际应用价值。

参考文献

[1]马丹.即时通信系统终端的设计与实现[D].成都:电子科技大学,2004.

[2]熊华胜,边信黔.VC++6.0环境下实现基于UDP协议的异步广播通信[J].应用科技,2004,31(2):44-46.

[3]中国教育和科研计算机网.网络协议TCP/IP、IPX/SPX、NETBEUI简介[EB/OL].[1994-01-11].http://www.edu.cn/20010830/210056.shtml.

[4]胡春安,胡中栋.MFC中对话框的创建和应用[J].电脑开发与应用,2005(9):58-59.

[5]杨阳,唐波.远程控制软件编程之多用户显示[J].黑客防线,2009(1):110-112.

[6]陈海蕊,郝世选.VC中基于Socket的局域网监控软件[J].濮阳职业技术学院学报,2009,22(6):136-138.

[7]宋玥玥,吴刚,杜刚.基于UDP协议的数据传输[J].中国电子商情:通信市场,2010(2):176-179.

[8]张喻平.基于互联网的视频远程回放技术的研究[D].武汉:武汉工业学院,2007.

[9]张承钊.互联网转换网关中FTP-ALG的设计与实现[D].成都:电子科技大学,2006.

[10]陈小兵.IP编址原则[J].网管员世界,2005(7):107.

VC++6.0平台 篇2

在科研与生产工作中, 绘图的应用可谓是无所不在, 比如在机械设计, 电子电路, 建筑等领域, 都需要设计图纸。在过去, 我们通过手绘的方式来设计图纸, 但这种方式的效率太低, 在计算机高速发展的今天已被绘图应用软件所代替。本文通过一个绘图程序的设计过程, 向读者详细介绍了绘图程序中很多具体功能的实现方式。

2、程序开发环境

该应用程序是在中文windows X P Professional环境下使用Microsoft Visual C++6.0开发而成的。

3、程序功能的分析与说明

本绘图应用程序需要实现的功能如下:

3.1 绘制图元

包括线段图元, 椭圆图元, 三角形图元, 矩形图元。

3.2 改变绘制条件

这包括:改变线条颜色, 线条类型, 线条宽度。

3.3 图形修改

包括删除, 拷贝, 剪切, 粘贴以及平移被选图元 (其中删除, 剪切和粘贴操作能够被撤销和恢复) , 撤销和恢复最近绘制的图元。

3.4 图元修改

包括修改被选图元颜色, 线型以及宽度。

3.5 文件的存取

本应用程序能够完成图形文件的保存, 打开。

根据以上的功能分析, 本程序可以被划分为以下功能模块:基本图元绘制, 图形修改, 图元修改, 图形文件存取。

4、程序框架设计

首先, 我们通过VC++提供的应用程序向导 (AppWizard) 来构建一个多文档的应用程序框架 (工程名为:Draw) , 然后再添加相应的代码和资源以实现该程序所需的功能。程序的总体设计思路如图1:

在构建好框架之后, 还需要添加一些菜单命令, 两个绘图工具栏 (分别用于选择绘图状态和绘制条件) 以及相应的代码 (当然还有每个功能模块的具体实现放到后面去讲) 。

5、图元数据的定义

在绘图中, 我们需要对图元进行存取。为避免浪费内存空间, 我们采用动态方式进行存储分配的链表结构来对图元进行存取。代码如下:

6、功能模块的设计

在构建好程序主框架后, 我们来对四个功能模块分别进行设计。

6.1 基本图元的绘制

图元的绘制包括:线段, 椭圆, 三角形, 矩形, 无论绘制哪种图元, 我们都是通过“按下鼠标左键 (L B U T T O N D O W N) -拖动鼠标 (M O U S E M O V E) ——释放鼠标左键 (LBUTTONUP) ”这样一个过程来确定所绘制图元的位置和具体形状。设计思路如下:

(1) .在LBUTTONDOWN的消息函数中, 记录下鼠标的位置作为起点;

(2) .在MOUSEMOVE的消息函数中, 画出图元的预览线;

(3) .在LBUTTONUP的消息函数中, 记录下鼠标的位置作为终点, 然后根据起点和终点最终画出所绘图元, 同时将图元的所有属性值存入图元链表。

在 (2) 和 (3) 这两步中, 均需要首先判断当前处于哪种图元绘制状态, 然后在进行相应的绘制工作。可以用switch语句来实现, 如下:

6.2 图形修改

图形的修改包括:删除, 拷贝, 剪切和平移被选图元 (其中删除和剪切操作能够被撤销和恢复) , 撤销和恢复最近绘制的图元。这四种基本功能的设计思路都是:在每种消息的消息映射函数中对被选择图元的结点的相应成员变量做相应修改 (例如删除操作时, 将其成员变量delete设置为TRUE, 平移操作时根据鼠标的移动将其表征图元位置的成员变量修改) , 修改完毕后, 再通过语句Invalidate Rect (NULL) 来自动引发对On Draw () 函数的调用, 在On Draw () 函数中按照修改后的图元结点的成员变量值来重新绘制这些图元 (比如delete为TRUR的图元结点不再绘制, 坐标位置被修改过的图元按新的坐标来绘制) , 从而实现了这四个基本功能。

6.3 图元修改

图元修改包括修改被选图元颜色, 线型以及宽度。其设计思路和前面图形修改的类似:根据新选择的图元属性 (线条颜色, 线型以及宽度) 来对被选图元的相应成员变量 (color, width, style) 进行修改, 然后再通过语句Invalidate Rect (NULL) 来自动引发对O n D r a w () 函数的调用, 在On Draw () 函数中按照修改后的图元结点的成员变量值来重新绘制这些图元, 从而实现了图元的修改功能。

6.4 图元文件存取

绘制完毕的图形需要存储起来 (图形文件的扩展名设定为:.dra) , 并且下次可以在该应用程序中将其载入, 我们可以通过“文件”菜单的“保存”和“打开”命令对应的消息影射函数来编程实现存取操作。存储时:将图元链表中的图元结点的所有成员变量值写入图元文件 (第一次存储时还应创建文件) ;载入文件时, 首先构建图元结点, 然后将文件中的数据读出, 再写到图元结点相应的成员变量中去, 再通过On Draw () 函数将它们重新绘制出, 从而实现了打开文件操作。

7、程序测试

在VC++6.0中, 我们对程序的各个功能模块进行了仔细的调式。通过调试, 发现了程序还存在一些问题, 比如无法执行删除操作, 经过对代码的仔细检查, 我们发现:在执行绘图的代码前遗漏了if (!head->del) , 因为只有在图元未删除时才能对其进行绘制。经过我们的修改, 程序基本实现了我们预期的功能。程序运行界面如图2:

摘要:绘图工作在很多工程领域是不可或缺的, 但不管是在哪个领域的应用, 绘图程序中很多功能的实现方式在本质上都是相通的。这篇论文通过一个绘图程序的设计与实现详细介绍了绘图操作中很多基本功能的实现方式。

关键词:图元,链表结构,功能模块

参考文献

[1]郑莉, 懂渊.C++语言程序设计 (M) .北京:清华大学出版社.2001.

[2]张卫华, 刘征.VisualC++程序设计实战训练 (M) .北京:人民邮电出版社.2004.

[3]张立科.VisualC++6.0MFC类库参考手册 (M) .北京:人民邮电出版社.2002.

[4]季海捐, 韩亚萍.VisualC++6.0基础培训百例.北京:机械工业出版社.2006.

VC++6.0平台 篇3

在进行电路分析和设计时,常使用Proteus、Multisim、EWB、OrCAD(Spice)、Protel等电路分析工具。但用这些软件来分析电路,所得数据精度难以提高,且软件界面固定,设计出的模型很难脱离分析环境独自运行。现代电路分析提供了一种用矩阵方式分析电路问题的解决方法,这种方法也是以上电路分析软件的基础,Matlab包含许多矩阵函数,可以快速地验证自己的模型和算法。虽然Matlab作为一种解释性语言,运行效率较低。但如果使用VC++6.0调用Matlab C++数学库,就可以编写出具有良好人机界面、运行效率较高、个性化的电路分析程序。

现代电路分析把基本的电路定律,即基尔霍夫电流定律(KCL)、基尔霍夫电压定律(KVL)和元件支路方程结合起来,建立网络方程组,主要用于研究线性时不变网络。该分析方法利用拓扑学的基本原理将电路图转换成矩阵形式,在电路图和计算机之间架起一座桥梁,即实现电路信息的计算机化。Matlab语言是一种解释型的高级语言,它包含自己的数据结构、程序流控制及文件输入输出等功能,并能很好地处理矩阵运算。其次,为了使程序的人机界面友好,Windows操作系统能支持的程序是较佳的选择,VC++6.0是Microsoft公司推出的可视化编程环境。主要适合在Windows下进行32位应用程序的开发。开发一个Win32应用程序是一件耗费时间的事,MFC即微软基础类是一种VC++语言类库,这样,利用VC++6.0的MFC功能来编制Win32程序时,程序员就能利用标准的类库来提高编程效率和程序的质量。Matlab6.5版本带有Matlab C++数学库,使程序员用VC++和Matlab混合编程更加容易。文中将具体介绍如何根据现代电路分析理论,采用节点分析法,使用VC++6.0和Matlab混合编程来编制Win32程序,有效解决线性电路电参数的计算机分析问题。

2 步骤

2.1 有向图

将电路转换成矩阵形式的第一步是要画出与电路对应的拓扑图,图1为示范用的电路。绘制该电路的拓扑图时,保留了电路的节点,并用线代替全部支路。有向图就是在拓扑图中加入表示对应支路电流方向的箭头,有向图表明节点和支路的连接关系,而不表明电路元件。图2就是与图1对应的有向图。

将电路转换成矩阵形式的第二步是要选择一个树。树是连接图的全部节点而不包含任何回路的支路的集合,组成树的支路叫树枝,不组成树的支路叫连支。在大部分网络中,存在着许多可能的树。由于树中无回路,基尔霍夫电压定律不能用来描述树枝电压之间的关系。因此,树枝电压是独立的。可以断定,在无独立电压源的情况下,网络中独立电压的个数等于树枝数。假定全部独立压源都包括在树里面,显然,每个独立压源都约束着一个节点相对于另一个节点的电压,因而使网络中独立电压的数目减少一个。同样,当每个连支加到图上而建立起一个回路时,该连支电流只在此回路中环流,因此连支电流是独立的。假定全部独立流源都作为连支包括进来,显然,每个独立流源都约束着一个连支电流,因此使网络中独立电流的数目减少一个。选择网络的树为选择独立变量最小集合提供了方法,根据这些变量能够求得全部网络电压和电流。

在利用树枝电压和连支电流的分析方法中,独立电源都假定他们与有限阻抗串联,或与有限阻抗并联。虽然有需要利用等效电路来处理的例外情况,但这在实践中是可行的。两种分析方法都要求定义如图3所示的标准支路。为了给下面的矩阵分析做准备,用下标r表示电路中第r支路的自阻抗或自导纳。

连支电流分析要求独立流源必须跨接在支路两端,树枝电压分析要求独立压源必须与阻抗Zrr相串联。对后面介绍的分析方法,戴维南定理可以用来将标准支路转化成简单等效电流源(Ir-YrrEr)或简单等效电压源(Er-ZrrIr),这时伪节点就没有了。对第r支路,欧姆定律表明Vr=Zrr·Ir对全部支路,可以同时用矩阵方程

式中,vT=[v1,v2,…,vb](vT为v的转置矩阵)

同样j=Yv(2-2)

式中

把基尔霍夫定律用到第r标准支路,得jr=Ir+ir和vr=Er+er或者对全部支路写成矩阵形式

式中

代入方程(2-1)和(2-2),并整理得

这些方程可逐个用到各支路上去,下面的矩阵分析法将利用这些方程,研究电路连接对支路电压和电流的约束。

将电路转换成矩阵形式的第三步是用基本切割方法切割第二步选择的树。所谓基本切割是指恰好切断一根树枝的切割,方向是被切断树枝的方向。通过基本切割获得割集矩阵,这种矩阵的元素由1、0或-1组成。首先把树枝由1开始编号,矩阵的行数对应于具有相同号数的电路支路。同样,矩阵的每一列对应于一个切割。图4即是与示例电路对应的一个树,和对该树所做的3个基本切割。

分块使矩阵分成上下两部分,上面部分用DT表示,它与树枝对应;下面部分DL则对应于连支。因为割集的切割数等于树枝数,且基本切割只能切断一根树枝,所以DT必然是单位矩阵。如果按行号数标记的支路被按列号数标记的切割所交割,并且支路电流方向与该切割的树枝电流方向相同,那么矩阵取值为+1;如果支路电流取相反方向,那么矩阵取为-1;如果支路不被切割,则取值为0。

2.2 求解电路各参数

根据上面步骤得到方程式(2-7),它是示范图割集基尔霍夫电流定律的矩阵表示形式。将该矩阵方程用字母方式表示为DTi=0。

矩阵D被称为割集矩阵,并由1、0或-1组成,图4中电路图的割集矩阵D重写为如下方程:

首先把树枝由1开始编号(如图4中的编号),矩阵的行数对应于具有相同号数的电路支路。同样,矩阵的每一列对应于一个切割。分块使矩阵分成上下两部分,上面部分用DT表示,它与树枝对应;下面部分DL则对应于连支。因为割集的切割数等于树枝数,且基本切割只能切断一根树枝,所以DT必然是单位矩阵。

割集矩阵的另一个特性是可用表示式DeT加以说明,其中eT是e与树枝有关的部分,完全展开得

在后面的分析中,将通过方程表示式v=E+e把独立压源包括进来。

割集分析的两个主要步骤是:将基尔霍夫电流定律用于割集和将连支电压用树枝电压来表示。这两步都已用割集矩阵来完成了,所以电路分析是能够表示成矩阵形式的。重写式(2-6)的支路相互关系为:

等式两边左乘DT,得到:

由前所知,根据基尔霍夫电流定律,DTi=0(见矩阵方程式(2-7)的字母表示形式)。用方程(2-10)的e代换,得到:

要把解表示成独立树枝电压的集合,需将矩阵DTYD求逆,得到:

网络中其余的电压和电流,都可将其代入式(2-3)、式(2-4)、式(2-10)和式(2-11)去求得,即:

支路电压e=DeT

支路电流i=Ye-(I-YE)

矩阵元电压v=e+E

矩阵元电流j=i+I

至此,已经可以对只有两端元件的电路进行矩阵分析了。只要用Matlab等数学软件对矩阵进行分析便可得到相应电路的V-I特性了。

3 电路分析程序

以求解图1示范电路为例,介绍运用VC++和Matlab混合编程实现电路分析程序。

3.1 运行环境

对话框是VC++6.0中重要的应用程序模式之一。对话框可以接收用户输入的信息或数据,一般是通过在对话框上添加控件来实现对话框的操作,对话框依靠这些控件与用户进行交互。

(1)启动Visual C++6.0,选择“文件”菜单的“新建”命令,在弹出的“新建”对话框中选择“工程”页面,在该页面下选择“MFC AppWizard(exe)”选项,并单击。在静态文本“工程”下的编辑框中输入程序的名称。在“位置”下的编辑框中输入程序项目的保存地址,然后单击“确定”按钮,进入创建工程向导界面。

(2)创建工程向导的第一步选择Dialog based(基本对话框)选项,同时还可以选择支持的语言,单击“Next”按钮,进入向导的第二步。

(3)在MFC向导的第二步,保持默认选项不变,直接单击“Finish”按钮后即出现对工程整体描述的对话框,单击“OK”按钮,进入开发界面。

(4)在资源窗口中单击鼠标右键,在弹出的对话框中选择Import,集成开发环境随即弹出导入资源对话框,在该对话框中选择图1示范电路,单击“Import”按钮,即把该示范电路加入到了程序工程环境中。使用该图作为程序界面使程序直观、易用。

(5)在图上添加编辑框控件,作为人机进行数据交流的接口。在VC++6.0中对话数据交换(DDX)和对话数据确认(DDV)是两个非常简单而又非常强大的功能。它们使得在MFC中从对话框字段或任何其他CWnd的派生类中插入和抽取数据变得非常容易。因此本程序将使用对话框的DDX和DDV功能具体进行人机数据交流。

3.2 矩阵运算

要在VC++中调用Matlab的功能,需要按照下面3个步骤改变VC++工程创建时的默认设置。

第一步,在VC++工程设置中加入的静态链接库:libmatpm.lib,libmx.lib,libmatlb.lib,libmat.lib,libmmfile.lib,sgl.lib和libmwsglm.lib。其中,sgl.lib和libmwsglm.lib只有在用到Matlab C++图形库的时候才需要在VC++工程设置中加入。

第二步,设置C/C++标签中的选项,在VC++6.0的IDE中选择Project菜单,在弹出的菜单中选择Project Settings(工程设置)选项,将出现Project Settings对话框,选择C/C++选项,将Category的下拉列表框内容设置位Code Generation,又将Use run-time library选项设置为Multithreaded DLL。将Category选项设置为Preprocessor,并且在Preprocessor definitions选项中增加如下内容:MSVC,MSWIND,IBMPC,D__STDC_,_AFXDLL。

第三步,在工程中包含相应的头文件。在Visual C++工程中如果不用Mablab C++图形库的时候,只需要包含头文件"matlab.hpp”;如果要用到Matlab C++图形库的时候,则需要包含头文件“matlab.hpp”和“libmwsglm.hpp”。

在做完以上三步的设置后,就可以在VC++工程中通过Matlab C++数学库调用Matlab的矩阵运算函数了。

3.3 难点问题及处理方法

由于平时使用的软件开发平台的数据存储格式与Matlab的数据存储格式不同,要将Matlab的功能运用于自己的程序中,就要解决好两种编程语言的沟通问题。对于多维数组,与C语言的数组元素在内存中按行的排列顺序不同,所有Matlab阵列在内存中都是按列排列的。因此,在程序中需要专门设置程序来实现两种编程语言的矩阵数据存储格式的相互转化。

其次,由于Matlab所有的运算都是采用双精度浮点型,因而整型阵列如果要参加运算,必须先转化为双精度型。Matlab C++数据库只有Matlab阵列一种数据类型。Matlab C++数据库中用mwArray类封装了Matlab阵列的数据及其基本操作函数。因此,可以使用mwArray类作为C++语言和Matlab语言的沟通桥梁。

如何将mxArray转化为C++语言可以直接使用的基本数据类型,或者如何将C语言的基本数据类型转化为mxArray类型?这个问题由Matlab通过提供一系列操作mxArray的API函数解决了。例如:

int mxGetM(const mxArray*array_ptr)函数可以得到Matlab阵列的行数,

int mxGetN(const mxArray*array_ptr)函数可以得到Matlab阵列的列数,

double*mxGetPr(const mxArray*array_ptr)函数可以得到Matlab双精度数值阵列的实部数据指针。

GetData()函数放回一个mxArray结构的指针,通过这个mxArray结构,开发人员可以通过Matlab C数学库的函数进行数据访问操作。使用GetData()函数需要注意的是,不要释放GetData()函数放回的mxArray指针指向的内存及mxArray中包含的数据。

ToString()函数可以将字符类型mwArray中的字符数据转化为C/C++语言字符串数据。

4 结语

在理解矩阵电路分析方法之后,就可以根据具体的线性电路运用网络拓扑的方法作出有向图,并选出一棵树,依顺序进行基本切割,获得割集矩阵,再利用VC++和Matlab混合编程实现人机界面友好的Win32电路分析应用程序。经过与EWB,PSPICE等电路分析软件比对,按该方法设计出的程序,其计算结果与这两款软件分析同一线性电路所得数据一致。这表明这种电路分析程序设计方法能够实际运用于工作之中。

摘要:在分析和设计电路时,常使用Proteus、Multisim、EWB、OrCAD(Spice)、Protel等电路分析工具,但要想得到更精确的电路分析数据或者个性化的电路模型,以上工具却难以应付。现代电路分析提供了一种用矩阵方式分析电路问题的解决方法,这种方法也是以上电路分析软件的基础。Matlab提供了许多矩阵运算函数,使用VC++6.0能够设计出接口良好的Windows程序。因此,使用VC++6.0和Matlab混合编程就能编写出矩阵电路程序,解决个性化的电路分析问题。

关键词:矩阵分析,VC++6.0,Matlab,混合编程

参考文献

[1]杜普选,等.现代电路分析[M].北京:北方交通大学出版社,2002.

[2]刘维.精通Matlab与C/C++混合程序设计[M].北京:北京航空航天大学出版社,2005.

[3]Marshall Brain,Lance Lovette,译星翻译.MFC开发人员指南[M].北京:机械工业出版社,1999.

[4]阮宇.Visual C++6.0基础教程[M].北京:清华大学出版社.

【VC++6.0平台】推荐阅读:

逻辑平台07-14

融资平台07-14

平台软件07-15

咨询平台07-21

媒介平台10-14

消息平台10-15

外贸平台10-15

创新平台10-16

管控平台10-16

平台建模10-19

上一篇:智能停车解决方案下一篇:政治知识