VC编程资料总结

2024-08-26

VC编程资料总结(精选8篇)

VC编程资料总结 第1篇

VC++编程经验总结

vc++如何实现远程调试

*假设调试机IP 192.168.0.182 远程机IP 192.168.0.161

*远程机为调试机分配权限,使调试机可以使用远程桌面登陆到远程机器上(这样调试起来方便)。

*调试机上安装visual studio.net 2003

共享调试机上的Visual Studio上的远程调试目录(以我的机器为例)

C:Program FilesMicrosoft Visual Studio.NET

2003Common7PackagesDebugger

*远程机将上面的共享目录考贝到本地,比如:d:Debugger

*调试机共享要调试的程序所在目录,比如:

D:importantcvsrootdv-to-dvdbindebug

*远程机将调试机上的目录影射为本地目录。比如:Z:

*远程机上以命令行形式执行 D:Debuggermsvcmon.exe –tcpip –anyuser

*调试机启动vc.打开要调试的工程。比如dvtodvd.选择菜单project->properties 选debuging->remote setting

Connection :Remote via TCP/IP(Native only)

Remote machine: 192.168.0.161

Remote Command: z:dvtodvd.exe

*debug->start

*就可以调试了。

1.如何在Release状态下进行调试

Project->Setting=>ProjectSetting 对话框,选择Release状态。C/C++标签中的Category选General,Optimizations选 Disable(Debug),Debut info选Program Database。在Link标签中选中Generate debug info复选框。

注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。

2.Release和Debug有什么不同

Release版称为发行版,Debug版称为调试版。

Debug中可以单步执行、跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢。Release版运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。Release 的exe文件链接的是标准的MFC DLL(Use MFC in a shared or static dll)。这些DLL在安装Windows的时候,已经配置,所以这些程序能够在没有安装Visual C++ 6.0的机器上运行。而Debug版本的exe链接了调试版本的MFC DLL文件,在没有安装Visual C++6.0的机器上不能运行,因为缺相应的DLL,除非选择use static dll when link。

3.ASSERT和VERIFY有什么区别

ASSERT里面的内容在Release版本中不编译,VERIFY里面的内容仍然翻译,但不再判断真假。所以后者更安全一点。

例如ASSERT(file.Open(strFileName))。

一旦到了Release版本中,这一行就忽略了,file根本就不Open()了,而且没有任何出错的信息。如果用VERIFY()就不会有这个问题。

4.Workspace和Project之间是什么样的关系

每个Workspace可以包括几个project,但只有一个处于Active状态,各个project之间可以有依赖关系,在project的Setting..中可以设定,比如那个Active状态的project可以依赖于其他的提供其函数调用的静态库。

5.如何在非MFC程序中使用ClassWizard

在工程目录下新建一个空的.RC文件,然后加入到工程中就可以了。

6.如何设置断点

按F9在当前光标处增加一个断点和取消一个断点。

另外,在编辑状态下,按Ctrl+B组合键,弹出断点设置对话框。然后单击【Condition…】按钮弹出设置断点条件的对话框进行设置。

7.在编辑状态下发现成员变量或函数不能显示提示是如何打开显示功能

这似乎是目前这个Visual C++ 6.0版本的一个bug,可按如下步骤使其正常,如再出现,可如法炮制:

(1)关闭Project

(2)删除“工程名.ncb”文件

(3)重新打开工程

8.如何将一个通过ClassWizard生成的类彻底删除

首先在工作区的FileView中选中该类的.h和.cpp文件,按delete删除,然后在文件管理器中将这两个文件删除,再运行ClassWizard,这时出现是否移走该类的提示,选择remove就可以了。

9.如何将在workspace中消失的类找出来

打开该类对应的头文件,然后将其类名随便改一下,这个时候工作区就会出现新的类,再将这个类改回原来的名字就可以了。

10.如何清除所有的断点

菜单【Edit】->【Breakpoints…】,打开“Breakpoints”对话框,单击【Remove All】按钮即可。快捷键是“Ctrl + Shift + F8”。

11.如何再ClassWizard中选择未列出的信息

打开“ClassWizard”对话框,然后切换到“Class Info”页面。改变“Message filter”,如选择“Window”,“Message”页面就会出现Window的信息。

12.如何检测程序中的括号是否匹配

把光标移动到需要检测的括号前面,按快捷键“Ctrl + ]”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告。

13.如何查看一个宏(或变量、函数)的定义

把光标移动到要查看的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的相关菜单),如果没有建立浏览文件,就会出现提示对话框,按【确定】按钮,然后就会跳到该宏(或变量、函数)定义的地方。

14.如何添加Lib文件到当前工程

单击菜单【Project】->【Settings…】弹出“Project Setting”对话框,切换到“Link”标签页,在“Object/library modules”处输入Lib文件名称,不同的Lib之间用空格格开。

15.如何快速删除项目下的Debug文件夹中临时文件

在工作区的FileView视图中选中对应的项目,单击右键弹出菜单,选择【Clean(selection only)】菜单即可。

16.如何快速生成一个现有工程除了工程名外完全相同的新工程

在新建工程的“New”对话框中选择“Custom Appwizard”项,输入新工程的名字,单击

【OK】按钮。出现“Custom AppWizard”项,输入新工程的名字,单击【OK】按钮。出现“Custom AppWizard-Step 1 of 2”对话框,选择“An existing Project”项,单击

【Next】按钮。出现“Custom AppWizard-Step 2 of 2”对话框,选择现有工程的工程文件名,最后单击【Finish】按钮。编译后就生成一个与现有工程相同但可以重新取名的工程AppWizard。

现在就可以项用MFC AppWizard一样用这个定制的向导。如果不想用了,可以在Visual C++ 6.0安装目录下CommonMSDev98Template目录中删除该Wizard对应的.awx和.pdb文件。

17.如何解决Visual C++ 6.0不正确连接的问题

情景:明明改动了一个文件,却要把整个项目全部重新编译链接一次。刚刚链接好,一运行,又提示重新编译链接一次。

这是因为出现了未来文件(修改时间和创建时间比系统时间晚)的缘故。可以这样处理:找到工程文件夹下的debug目录,将创建和修改时间都比系统时间的文件全部删除,然后再从新“Rebuild All”一次。

18.引起LNK2001的常见错误都有哪些

遇到的LNK2001错误主要为:unresolved external symbol “symbol”

如果链接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误信息。

一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在,拼写不正确或者使用错误;其次可能使用了不同版本的链接库。以下是可能产生LNK2001错误的原因:

<1>由于编码错误导致的LNK2001错误

(1)不相匹配的程序代码或模块定义(.DEF)文件导致LNK2001。例如,如果在C++源文件了内声明了一变量“var1”,却试图在另一个文件内以变量“var1”访问改变量。

(2)如果使用的内联函数是在.cpp文件内定义的,而不是在头文件内定义将导致LNK2001错误。

(3)调用函数时如果所用的参数类型和头函数声明时的类型不符将会产生LNK2001错误。

(4)试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001错误。

(5)要注意函数和变量的可公用性,只有全局变量、函数是可公用的。静态函数和静态变量具有相同的使用范围限制。当试图从文件外部方位任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001错误。

<2>由于编译和联机的设置而造成的LNK2001错误

(1)如果编译时使用的是/NOD(/NODERAULTLIB)选项,程序所需要的运行库和MFC时将得到又编译器写入目标文件模块,但除非在文件中明确包含这些库名,否则这些库不会被链接进工程文件。这种情况下使用/NOD将导致LNK2001错误

(2)如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC时将出现“unresolved external on _WinMain@16”的LNK2001错误信息。

(3)使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func”的引用。如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行链接,将在__imp__func上发生LNK2001错误。如果不使用/MD选项编译,在使用MSVCxx.LIB链接时也会发生LNK2001错误。

(4)使用/ML选项编译时,如用LIBCMT.LIB链接会在_errno上发生LNK2001错误。

(5)当编译调试版的应用程序时,如果采用发行版模态库进行链接也会产生LNK2001错误;同样,使用调试版模态库链接发行版应用程序时也会产生相同的错误。

(6)不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。

(7)在不同的模块中使用内联和非内联的编译选项能够导致LNK2001错误。如果创建C++库时打开了函数内联(/Ob1或/Ob2),但是在描述该函数的相应头文件里却关闭了函数内联(没有inline关键字),只是将得到错误信息。为避免该问题的发生,应该在相应的头文件中用inline关键字标志为内联函数。

(8)不正确的/SUBSYSTEM或ENTRY设置也能导致LNK2001错误。

19.如何调试一个没有源码的exe文件调用的dll

在Visual C++ 6.0中,进入“Project Setting”对话框然后选择Debug标签页。通常Visual Studio默认“executable for debug session”为可执行文件名,但可以将他改成任何你想要的程序。甚至可以指定不同的工作目录以及传递参数到你的程序。这个技术常用来调试Dlls、名字空间扩展、COM对象和其他从某些EXE以及从第三方的EXE中调用的plug-in程序。

20.Visual C++ 6.0工程中的项目文件都表示什么

.opt:工程关于开发环境的参数文件。如工具条位置等信息。

.aps(AppStudio File)资源辅助文件,二进制格式,一般不用去管它。

.clw:ClassWizard信息文件,实际上是INI文件格式,有兴趣可以研究一下。有时候ClassWizard出了问题,手工修改CLW文件可以解决。如果此文件不存在的话,每次用ClassWizard的时候回提示是否重建。

.dsp(DevelopStudio Project):项目文件,文本格式,不过不熟悉的不要手工修改。.dsw(DevelopStudio Workspace):是工作区文件,其他特点和.dsp差不多。

.plg:是编译信息文件,编译时的error和warning信息文件(实际上是一个html文件),一般用处不大。在单击菜单【Tool】->【Option】弹出的对话框里面有个选项可以控制这个文件的生成。

.hpj(Help Project):是生成帮助文件的工程,用microsoft Help Compiler可以处理。.mdp(Microsoft DevStudio Project):是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的.dsp格式。

.bsc:是用于浏览项目信息的,如果用Source Brower的话就必须有这个文件。如果不用这个功能的话,可以在Project Options里面去掉Generate Browse Info File,这样可以加快编译速度。

.map是执行文件的映象信息记录文件,除非对系统底层,这个文件一般用不着。.pch(Pre-Compiled File):是与编译文件,可以加快编译速度,但是文件非常大。

.pdb(Program Database):记录了程序有关的一些数据和调试信息,在调试的时候可能有用。

.exp:只有在编译DLL的时候才会生成,记录了DLL文件的一些信息,一般也没有用。.ncb:无编译浏览文件(no compile browser)。当自动完成功能出问题时可以删除此文件。编译工程后会自动生成。

VC编程资料总结 第2篇

VC图像编程教案 第五章

5.对话框及控制的应用 5.1 先以日历控件说明控件编程的重要性 5.2 说明编写控件所需要的知识: 控件的动态生成-全局变量(类的成员变量) 自定义消息的定义与响应; (见我空间里的文章“这篇技术的文章不错”等) 5.3 一个实现加法功能的对话框程序,由此函数说明两点: 控件关联变量和关联值的区别 UpdateData函数的`用法 5.4 将刚才的程序转化的控件程序,体会控件编程的思路 GetDlgItem的用法 5.5 如何在其他程序中使用对话框

基于VC编程的数字图像几何变换 第3篇

摄影测量与遥感所获取数字影像, 尤其是近景摄影测量采用非量测相机获取的影像, 不能直接应用于测量, 首先需要经过图像处理, 形成满足测量要求的图像。

图像几何变换是图像处理的基础。经过几何变换, 使图像易于处理, 有利于特征提取和对图像信息的理解。

1 原理介绍

1.1 图像平移

平移是指将图像中所有的点都按照指定的平移量水平、垂直移动。设 (x0, y0) 为原图像上的一点, 图像水平平移量tx, 垂直平移量为ty, 则平移后点 (x0, y0) 的坐标变为 (x1, y1) 。

(x0, y0) 与 (x1, y1) 之间的关系为:x1=x0+tx;y1=y0+ty。

平移后图像上的一点是由原图像上某点经过平移得到的, 因此平移后图像中每个像素的颜色是由原图像中对应像素颜色确定的。如新图中的 (0, 0) 点的颜色和其在原图中的对应点 (-tx, -ty) 处的一样。

1.2 图像旋转

图像旋转通常是以图像的中心为圆心, 按顺时针方向旋转。

设旋转前一点坐标 (x0, y0) , 旋转a角度后对应点坐标 (x1, y1) , 则以矩阵的形式表示:

1.3 图像缩放

假设放大因子为ratio, 缩放的变换矩阵为:

由于放大图象时产生了新的象素, 缩小时合并了像素, 变换后图像上点与原图点不存在一一对应的关系, 所以采用的做法是找与之最临近的点。

2 算法设计

2.1 图像平移

图像几何变换都是基于像素处理的。

首先打开原始图像, 获取图像信息。

第二步设置水平平移量和垂直平移量。根据平移量和原图像高度宽度, 计算平移后图像的宽度和高度:

NWidth=l Width+ (long) f XMove;NHeight=l Height+ (long) f YMove。

第三步采用行列循环方式, 计算新图像中每个像素对应于原图像的像素, 将原图像的像素灰度值或RGB颜色值赋值给新图像的像素。对于原图像中没有的对应点的像素, 将其灰度值设为0 (白色) 。以8位图为例, 程序如下:

2.2 图像旋转

首先打开原始图像, 获取图像信息, 包括图像的高度、宽度、调色板或者RGB值等信息。

第二步因为图像旋转采用以图像中心为原点的坐标系, 因此首先进行坐标转换, 计算原图四角点在以图像中心为原点的旋转坐标系中的坐标, 并根据旋转角度计算旋转后图像四角坐标, 利用旋转后图像四角点计算新图像高和宽。

第三步采用行列循环方式, 计算新图像中每个像素对应于原图像的像素, 将原图像的像素灰度值或RGB颜色值赋值给新图像的像素。对于原图像中没有的对应点的像素, 将其灰度值设为0 (白色) 。

2.3 图像缩放

首先打开原始图像, 获取图像信息, 包括图像的高度、宽度、调色板或者RGB值等信息。

第二步设置缩放参数, 并根据原图像宽、高计算经过缩放后的图像的宽、高。

第三步采用行列循环方式, 计算新图像中每个像素对应于原图像的像素, 将原图像的像素灰度值或RGB颜色值赋值给新图像的像素。对于原图像中没有的对应点的像素, 将其灰度值设为0 (白色) 。算法与平移和旋转类似, 在此不在详述。

3 实现方法与过程

(1) 创建一个MFC多文档工程, 并设置滚动视图模式。

(2) 在Doc类中声明一个HDIB类型的的成员变量m_h DIB, 并利用Class Wind类向导为Doc类添加On Open Document和On SaveDocument两个函数, 添加代码, 调用DIB.dll中封装好的open和save函数, 在On Draw函数中调用Draw (p DC, p Doc->m_h DIB) , 实现图像读取和保存功能。

(3) 添加菜单“平移”“旋转”“缩放”, 并为菜单添加相应的对话框资源, 用以设置相关参数。利用Class Wind类向导为各个菜单添加消息处理函数, 为每个对话框添加对话框类。

(4) 在对话框类中添加相应参数变量并初始化。为每个菜单消息处理函数编写函数体, 使之实现相应功能。

摘要:数字图像处理是摄影测量的基础, 图像几何变换是图像处理最基本的内容。文章就利用VC编程实现图像的平移、旋转、缩放的原理、算法和实现过程进行详细论述。

关键词:VC,数字图像,平移,旋转,缩放

参考文献

[1]孙家柄.遥感原理与应用[M].武汉:武汉大学出版社, 2006.

[2]王育坚.Visual C++面向对象编程教程[M].北京:清华大学出版, 2006.

[3]贾永红.数字图像处理[M].武汉:武汉大学出版社, 2004.

VC编程资料总结 第4篇

关键词 嵌入式SQL 预编译程序 动态连接库

中图分类号:TP312 文献标识码:A

0 引言

在通常的运用中,SQL语言是作为独立语言在终端交互方式下使用的,是非过程性的,其大多数语句都是独立执行,与上下文无关,称作自含式语言;而许多事务处理应用都是过程性的,需要根据不同的条件来执行不同的任务,如果把SQL语言嵌入到诸如C语言这样的过程化的编程语言中,程序开发人员就能设计出更加灵活的应用系统,具有SQL语言和高级编程语言的良好特征,它将比单独使用SQL或C语言具有更强的功能和灵活性,这种方式下使用的SQL语言称为嵌入式SQL语言。

在计算机专业课程《数据库系统概论》中有关于嵌入式SQL语言的内容,其教学手段一般都是理论讲述,教学效果不是十分理想。下面介绍一种在现有条件下都能办到的嵌入式SQL语言实现方法。

1 在VC中使用嵌入式SQL语言访问Microsoft SQL Server 2000

1.1 使用嵌入式SQL语言所采用的系统配置

①操作系统:Windows 2000 Professional

②Microsoft Visual C++ 6.0

③Microsoft SQL Server 2000

在安装Microsoft SQL Server 2000 时要注意选择安装Development Tools,为使用嵌入式SQL语言准备必要的头文件和库文件。

1.2 编辑嵌入式SQL程序

使用文本编辑器如记事本编辑嵌入式SQL程序,其存盘文件的扩展名为"sqc"。在嵌入式SQL程序中嵌入的SQL语句以EXEC SQL作为起始标识,语句的结束以";"作为标识。在嵌入的SQL语句中可以使用C语言的程序变量(即主变量),这时主变量名前加冒号(:)作为标志,以区别于字段名。主变量的声明必须包含在"EXEC SQL BEGIN DECLARE SECTION; "和"EXEC SQL END DECLARE SECTION; "之间。以下是一个嵌入式SQL程序demo.sqc:

#include

void main()

{

EXEC SQL BEGIN DECLARE SECTION;

char first_name[50];

char last_name[] = "White";

EXEC SQL END DECLARE SECTION;

EXEC SQL CONNECT TO my_server.pubs

USER my_login.my_password;

EXEC SQL SELECT au_fname INTO :first_name

FROM authors WHERE au_lname = :last_name;

EXEC SQL DISCONNECT ALL;

printf("first_name: %s\n", first_name);

}

此C语言程序中嵌入了SQL语句,用来访问数据库服务器my_server中的数据库pubs,登录名my_login,口令my_password,在表authors中检索姓"White"的作者的名,并存入主变量first_name,然后通过printf函数输出结果。

1.3 预编译嵌入式SQL程序

Microsoft SQL Server 2000提供的预编译程序nsqlprep.exe,用于对嵌入式SQL程序进行预编译处理,生成C语言源程序。实际上就是将嵌入式SQL程序中的嵌入式SQL语句替换为对运行时库文件Sqlakw32.dll的函数调用,接着运行时库文件调用动态连接库Ntwdblib.dll通过网络来存取Microsoft SQL Server 2000数据库服务器。

预编译程序nsqlprep的常用语法为:

nsqlprep ESQL_File /SQLACCESS /DB server_name.database_name /PASS login.password

其中ESQL_File是要预编译的嵌入式SQL程序;/SQLACCESS通知nsqlprep 自动地为嵌入式SQL程序中的静态SQL语句创建相应的存储过程;/DB server_name.database_name指明要连接的服务器以及数据库名称;/PASS login.password给出登录名及相应的口令。对于demo.sqc的预编译命令为:

nsqlprep demo /SQLACCESS /DB my_server.pubs /PASS my_login.my_password

经预编译处理后即可产生C语言源程序demo.c

1.4 配置VC++ 6.0 中的Project Settings

为了编译、连接nsqlprep生成的C语言源程序,需要增加必要的访问路径到VC++ 6.0 的环境设置中:

①选择菜单Tools中的菜单项Options

②选择Directories标签页

③在"Show directories for"下拉框中选择"Include files",增加Microsoft SQL Server 2000 开发所需头文件的路径:C:\Program Files\Microsoft SQL Server\80\Tools\DevTools\Include

④在"Show directories for"下拉框中选择"Library files",增加Microsoft SQL Server 2000 开发所需库文件的路径:C:\Program Files\Microsoft SQL Server\80\Tools\DevTools\LIB

1.5 生成访问Microsoft SQL Server 2000数据库的可执行程序

在VC++ 6.0 中创建一个"WIN32 Console Application"类型的Project,选择菜单Project中菜单项Add to Project的子项Files,将第三步中生成的C语言源程序demo.c添加到此Project中,然后编译、连接即可生成访问Microsoft SQL Server 2000数据库的可执行程序:demo.exe,运行的输出结果为:Johnson;这与使用交互式查询工具Query Analyzer检索的结果是一致的。至此,一个在VC++ 6.0中使用嵌入式SQL语言访问Microsoft SQL Server 2000数据库的应用已经开发完成。

2 结束语

本文探讨了Microsoft SQL Server 2000中的ESQL/C编程,并介绍了在常用编程软件VC++ 6.0 中嵌入式SQL程序设计的实现方法。在嵌入式SQL语言的课堂教学中,使用该方法,获得了良好的教学效果。

VC图像编程教案 第三章 第5篇

VC图像编程教案 第三章

VC图像编程教案 第三章 3 DIB类的高级应用。 3.1 BMP文件结构 BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。 typedef struct tagBITMAPFILEHEADER { WORDbfType; // 位图文件的类型,必须为BM DWORD bfSize; // 位图文件的大小,以字节为单位 WORDbfReserved1;  // 位图文件保留字,必须为0 WORDbfReserved2;  // 位图文件保留字,必须为0 DWORD bfOffBits; // 位图数据的起始位置,以相对于位图 // 文件头的.偏移量表示,以字节为单位 } BITMAPFILEHEADER; BMP位图信息头数据用于说明位图的尺寸等信息。 typedef struct tagBITMAPINFOHEADER{ DWORD  biSize; // 本结构所占用字节数 LONGbiWidth;  // 位图的宽度,以像素为单位 LONGbiHeight; // 位图的高度,以像素为单位 WORD biPlanes; // 目标设备的级别,必须为1 WORD biBitCount// 每个像素所需的位数,必须是1(双色),   // 4(16色),8(256色)或24(真彩色)之一 DWORD  biCompression; // 位图压缩类型,必须是 0(不压缩),   // 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一 DWORD  biSizeImage; // 位图的大小,以字节为单位 LONGbiXPelsPerMeter; // 位图水平分辨率,每米像素数 LONGbiYPelsPerMeter;  // 位图垂直分辨率,每米像素数 DWORD  biClrUsed;// 位图实际使用的颜色表中的颜色数 DWORD  biClrImportant;// 位图显示过程中重要的颜色数 } BITMAPINFOHEADER; typedef struct tagRGBQUAD { BYTErgbBlue;// 蓝色的亮度(值范围为0-255) BYTErgbGreen; // 绿色的亮度(值范围为0-255) BYTErgbRed; // 红色的亮度(值范围为0-255) BYTErgbReserved;// 保留,必须为0 } RGBQUAD; 颜色表中RGBQUAD结构数据的个数有biBitCount来确定: 当biBitCount=1,4,8时,分别有2,16,256个表项; 当biBitCount=24时,没有颜色表项。 位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下: typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader; // 位图信息头 RGBQUAD  bmiColors[1];  // 颜色表 } BITMAPINFO; 3.2 DIB类的Read函数: BOOL CDib::Read(CFile* pFile) {  // 1. read file header to get size of info hdr + color table  // 2. read info hdr (to get image size) and color table  // 3. read image  // cant use bfSize in file header  Empty;  int nCount, nSize;  BITMAPFILEHEADER bmfh;  try { nCount = pFile->Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER)); if(nCount != sizeof(BITMAPFILEHEADER)) {  throw new CException; } if(bmfh.bfType != 0x4d42) {  throw new CException; } nSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER); m_lpBMIH = (LPBITMAPINFOHEADER) new char[nSize]; m_nBmihAlloc = m_nImageAlloc = crtAlloc; nCount = pFile->Read(m_lpBMIH, nSize); // info hdr & color table ComputeMetrics(); ComputePaletteSize(m_lpBMIH->biBitCount); MakePalette(); m_lpImage = (LPBYTE) new char[m_dwSizeImage]; nCount = pFile->Read(m_lpImage, m_dwSizeImage); // image only  }  catch(CException* pe) { AfxMessageBox(Read error); pe->Delete(); return FALSE;  }  return TRUE; } 3.3 DIB类的Write函数: BOOL CDib::Write(CFile* pFile) {  BITMAPFILEHEADER bmfh;  bmfh.bfType = 0x4d42;  // BM  int nSizeHdr = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;  bmfh.bfSize = 0; // bmfh.bfSize = sizeof(BITMAPFILEHEADER) + nSizeHdr + m_dwSizeImage;  // meaning of bfSize open to interpretation (bytes, words, dwords?) -- we wont use it  bmfh.bfReserved1 = bmfh.bfReserved2 = 0;  bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) +  sizeof(RGBQUAD) * m_nColorTableEntries;   try { pFile->Write((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER)); pFile->Write((LPVOID) m_lpBMIH,  nSizeHdr); pFile->Write((LPVOID) m_lpImage, m_dwSizeImage);  }  catch(CException* pe) { pe->Delete(); AfxMessageBox(write error); return FALSE;  }  return TRUE; } 3.4 明确图像文件 CFile CDib类三者之间的关系 3.5 尝试直接用CDib类的m_lpImage成员读取图像数据。 3.6 尝试通过Write保存图像到另一个位置 3.7 尝试通过Write重写原图像文件(注意保存)

VC图像编程教案 第二章 第6篇

VC图像编程教案 第二章

第二章 常用算子练习实验图片: 第二章 TITLE=VC图像编程教案 2.1 边缘检测算子 2.1.1 算子卷积的原理-----相当于高通滤波器 2.1.2 应用算子时边界的处理方法 2.1.3 算子模板 Roberts: 第二章 TITLE=VC图像编程教案 第二章 TITLE=VC图像编程教案 Sobel: 第二章 TITLE=VC图像编程教案取两结果中的大值为变换结果 Priwitt: 第二章 TITLE=VC图像编程教案 Krisch: 第二章 TITLE=VC图像编程教案第二章 TITLE=VC图像编程教案 第二章 TITLE=VC图像编程教案 第二章 TITLE=VC图像编程教案第二章 TITLE=VC图像编程教案 第二章 TITLE=VC图像编程教案 第二章 TITLE=VC图像编程教案第二章 TITLE=VC图像编程教案 2.2 小波算子 2.2.1 小波算子原理,高低通算子参数关系为: 第二章 TITLE=VC图像编程教案 2.2.2 Daubechies_6(DB6)算子: 第二章 TITLE=VC图像编程教案 Daubechies_8(DB8)算子: 第二章 TITLE=VC图像编程教案 2.3 SUSAN角点检测方法(作业) SUSAN算子使用的是圆形模板来进行角点探测,圆形模板有等方向性的特点。一般使用模板的半径为3~4个像元。如图 第二章 TITLE=VC图像编程教案 模板置于每一个像素,将模板的每一个像像素与中心像素进行比较。 第二章 TITLE=VC图像编程教案 其中I(r)表示r点像素的灰度值,r0表示模板中心像素。t表示一个限制阈值,这个值决定了所能检测角点的最小对比度,也是能忽略的噪声的最大容限。它主要决定了能够提取 的特征数量越小,可从对比度越低的图像中提取特征,而且提取的特征也越多。因此对于不同对比度和噪声情况的图像应取不同的t值。 现在一些研究已经可以把这个t值改进为自适应值。也就是说可以根据图像的具体所含噪声确定最好的`t值。 第二章 TITLE=VC图像编程教案 由函数n计算出所谓的USAN区域面积值。C(r0)表示以r0为中心的圆邻域。然后由一个个局部非极大值抑制模板来确定最终角点。具体可由下式表述: 第二章 TITLE=VC图像编程教案 式中g为非极大值抑制门限。门限g决定了输出角点的USAN区域的最大值。g的大小不但决定了可从图像中提取角点的多寡,它还决定了所检测到的角点的尖锐程度。所以一旦确定了所需角点的质量(尖锐程度),g就可以取一个固定不变的值。一般情况下取1/2模板像素个数,例如7×7模板的g=37/2。 实验图片为: 第二章 TITLE=VC图像编程教案 预计检测结果:好于 第二章 TITLE=VC图像编程教案 (本课用时约1小时30分)

浅析VC与Matlab联合编程 第7篇

作者:邓科

在“浅析VC与Matlab联合编程<一>”和“浅析VC与Matlab联合编程<二>”中介绍了matcom,这个工具可以将用matlab写的m文件翻译成C++文件,或者是可执行文件(exe)或库文件(dll),

浅析VC与Matlab联合编程

。但是matcom在很多方面也有限制,比如,对struct等类的支持有缺陷,部分绘图语句无法实现或得不到准确图象,尤其是三维图象。

实际上VC与matlab的接口实现方法有很多种,matcom只是其中一种,本文再介绍一种比较容易实现的方法:COM接口方法。COM(Compponent Object Model组件对象模型)是一项比较复杂的技术,详细讲的话几本书也讲不完,所以在这里不作介绍,本文通过一个例子详细介绍如何在matlab下做COM组件,以及如何在VC中调用COM组件。

首先在Matlab编辑器里编辑m函数文件:启动matlab->File->New->M-file函数内容如图1:该函数无输入输出参数,文件保存为huatu.m。

图1 m函数huatu.m

在matlab下建立COM组件,步骤如下:

1、在matlab command window 输入如下命令:

>>comtool

出现com编辑界面,如图2:

图2 com组件编辑界面

2、新建工程:File->New Project…,如图3。

图2 com组件属性设置

3、设置组件属性,在”Component name“项中填写组件名称”component“,这时候会自动生成类”component“,在”Class name“项中填写类名称”huatu“,如图4,

图4 com组件属性设置1

为了便于区分,选中”Classes“中的”component“,点击“remove”按钮,将类component移除,再点击”Add>>“添加新类huatu,结果如图5,

点击”OK“,接下来出现一个对话框,选择”Yes“.

图5 com组件属性设置2

4. 添加文件:选中左边工作区的”huatu“,点击Project->Add File…,选择已经编辑好的函数文件huatu.m,如图6。需要注意的是m文件必须是m函数,否则会报错,如果是m脚本文件的话,只需要改为无输入输出参数的m函数即可。

图6 添加m文件

5、生成 com组件:点击Build->COM Object…,结果如图7。

图7

com组件已经由matlab做好,默认的保存位置为:matlab安装位置workcomponent。

VC中调用COM组件,步骤如下:

1、在VC中建立名为ComHuaTu的基于对话框的MFC(exe)。

2、面板上添加一个名为“画图”的button按钮,如图8。

图7 工程界面

3、将component_idl.h 和component_idl_i.c文件拷贝到VC建立的工程ComHuaTu目录下。两文件默认目录为workcomponentsrc

4、将上面两文件加入工程:工程->添加工程->Files,选择刚刚拷到目录下的component_idl.h 和component_idl_i.c文件。

5、将目录/extern/include/下的mwcomtypes.h拷贝到工程ComHuaTu目录下,并加入到工程中,方法同上。

6、为程序添加头文件component_idl.h 、component_idl_i.c和mwcomtypes.h,结果如图9

图9 添加头文件

7、按钮画图函数添加代码:

图10 添加按钮函数代码

VC编程资料总结 第8篇

1 VC编程概述

VC是一种软件集成开发环境,它是由微软公司开发完成的,换个角度理解就是基于C++的一个开发平台。VC是基于Windows平台的一种C++编程环境,包括MFC、ATL、COM等,此外还具有Windows平台的特性。基于Windows下的VC编程需要掌握Windows的消息机制和回调(callback)函数的原理。MFC是需要理解文档视图类的结构、窗口类的结构、消息流向等的Win32API的包装类。COM是一个需要掌握其基本原理代码共享的二进制标准。除此之外,VC是一个主流的开发平台,它不属于语言。如果将C++视为工业标准,那VC则是遵循工业标准的前提下衍生出来的某种厂商标准的操作系统平台。VC是一种包括WIN API和MFC方式的在Windows平台下开发的VC应用程序,MFC是对传统的WIN API再次封装,其结构相比较简单,所以MFC的开发模式备效率优势更加明显。

2 VC编程网络在线监测功能的模块化

要实现类似MFC的网络状态在线监测和数据分析,就必不可少的需要借助VC相应的功能,例如强大的网络通信板块、多线程开发板块等。在监测软件的开发过程中,充分利用VC成熟的开发资源平台,开发建立有针对性的应用功能模块,做到开发效率和软件质量的双赢,其主要包括以下环节:(1)功能模块设计。MFC应用的实际上是TCP/IP协议组主要用在IP主机、路由器之间传递控制消息的一个子ICMP协议。Windows给予了ASMP.dll的支持,能够从VC中直接引用,但是不支持移植,另外无法控制网络信息的数据包。因此,在基于工程中包含adewfxsock.hfg库的前提下,借助VC技术能够直接针对套接字(socket)进行有效编程,勾选了一个和MFC程序一样发送32字节的数据信息,得到数据包大小和TTL值的回馈,编程过程及系统调用时序,如图1所示。(2)网络状态在线监测。首先,构建套接字符串,然后指定使用的ICMP协议。其次,发送air_ICMP数据包,初试化ECHORHHGEQUEST的types为9的响应请求指令,然后通过系统调用发送ICMPSD数据,并设置目标IP地址。(3)监测套接字符串网络在线状态,检测一个或多个套字符串的状态。(4)响应数据的识别,判断网络在线监测状态。最终,在回馈的数据当中包含了该次在线监测的结果。至此,同MFC方式一样,通过VC编程实现网络状态在线监测。

3 VC多线程编程网络状态在线监测

进程和线程都可以被看作操作系统的概念。通过应用程序执行实例的过程被称作进程,私有的虚拟地址空间、代码、数据和其他各种系统资源共同构成了每个进程,并且在运行模拟的过程中进程的终止会销毁创建的资源,使得进程终止时,所使用的系统资源获得释放或关闭。线程以一个执行单元的形式存在于进程内部。系统创建好进程后,同时也就启动了以函数地址形式执行的进程的主执行线程,并且,Windows系统也将接受来自主执行线程的指令。主执行线程的行为状态最终决定了进程的行为状态。每一个进程都需要一个由系统自动创建的而不需要用户操作的线程。用户可以根据网络监测具体项目,来创建对应的程序在同一个进程中所需要的多个线程。网络状态在线监测模块,在不需要用户界面交互的条件下,能够自动获取所需要的目标IP地址数据,并通过该地址数据创建单独的线程,定时实现后台运行在线网络状态监测。线程之间的通讯之所以方便,是因为在一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,最终使得多线程技术的应用广泛流行。除此之外,为了减少某项任务的长时间占用CPU,多线程可以通过并行处理的方式来实现此功能。可以通过适当的人机交互界面和配置数据管理的方式,来搭建一个完整的VC编程控制的网络在线监测应用系统。该系统系统功能包括网络监测完成网络节点通阻状态的存储;状态显示完成网络节点通阻状态的监测;节点管理完成网络节点通阻状态的分析;指标分析完成网络节点通阻状态的显示。网络状态在线状态的显示是通过客户端图形模式和动态网页模式构成。客户端图形模式采用的是可以对系统监测周期和节点属性等参数进行配置的C/S架构,除此之外,该构架还可以查看节点监测通阻状态和大数据的整理与分析,最终得到故障原因及解决方案。而浏览器网页模式主要用于查看节点状态和指标分析数据。

4 结束语

基于VC编程充分利用了MFC总线的多节点、远距离、实时性好等优点,设计出了一套高效实用的网络在线监测系统,而且该系统具有直观实用的界面和高效简便的编程方式,在监测系统的应用很广泛。

参考文献

[1]赵立群,吴霞,孙岩.计算机网络管理与安全[M].北京:清华大学出版社,2014.

[2]罗莉琴,詹祖桥,黄辉等.Windows网络编程[M].北京:人民邮电出版社,2011.

[3]潘磊,裴斐.一种面向大规模网络拓扑发现的研究[J].计算机工程与应用,2010,46(19).

[4]DAVID.VISUAL C++6编程宝典[M].北京:电子工业出版社,2005.

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

【VC编程资料总结】相关文章:

vc编程经验总结chm05-11

VC编程07-11

smt编程员工作总结12-09

专升本编程题类型总结05-16

可编程控制器总结07-22

在线编程05-05

编程工艺06-02

编程特点06-28

极限编程06-29

基本编程07-08

上一篇:情绪控制论文下一篇:分部验收会议纪要