三九宝宝网宝宝教育智力培养

如何在Visual C 6

03月08日 编辑 39baobao.com

[如何在店铺设置音乐]呵呵,其实很多卖家老早就运用纯熟了,不过他们在忙生意,那我就在这里班门弄斧把知道的跟大家吧。不足的地方请高手补充。加背景音乐,这其实是个很有争议的问题。有的客户会因为喜...+阅读

在visual C++ 6.0 环境下编写C++程序需要经过建工程、建文件两个步骤。 按照如下进行,细心,就可以: 先建一个运行程序的工程。 1.打开visual C++ 6.0, 2.在菜单栏里选 文件/新建(File/new), 3.选择Win32 Console Application, 4.输入工程名Projectname(随便起), 5.选择程序保存目录Location, 这就是保存路径! 6.ok 7.Finish 8.ok 再建一个文件c++资源文件 9.在菜单栏里选 文件/新建(File/new), 10.选择C++ Source File, 11.填文件名File, 12.存储路径默认, 保存路径和工程路径相同 13.ok 在C++ Source File中输入代码,编辑完毕后。 14.点击编译器右中上角的编译图标(在像感叹号一样的图标左侧),编译时顺便查错... 15.运行(点像感叹号一样的图标)。 示例:下面有一段伪代码演示如何在窗口过程中处理消息 LONG yourWndProc(HWND hWnd,UINT uMessageType,WPARAM wP,LPARAM) { switch(uMessageType) {//使用SWITCH语句将各种消息分开 case(WM_PAINT): doYourWindow(...);//在窗口需要重新绘制时进行输出 break; case(WM_LBUTTONDOWN): doYourWork(...);//在鼠标左键被按下时进行处理 break; default: callDefaultWndProc(...);//对于其它情况就让系统自己处理 break; } } 接下来谈谈什么是消息机制:系统将会维护一个或多个消息队列,所有产生的消息都回被放入或是插入队列中。

系统会在队列中取出每一条消息,根据消息的接收句柄而将该消息发送给拥有该窗口的程序的消息循环。每一个运行的程序都有自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句柄调用相应的窗口过程。而在没有消息时消息循环就将控制权交给系统所以Windows可以同时进行多个任务。下面的伪代码演示了消息循环的用法: while(1) { id=getMessage(...); if(id == quit) break; translateMessage(...); } 当该程序没有消息通知时getMessage就不会返回,也就不会占用系统的CPU时间。 下图为消息投递模式 在16位的系统中系统中只有一个消息队列,所以系统必须等待当前任务处理消息后才可以发送下一消息到相应程序,如果一个程序陷如死循环或是耗时操作时系统就会得不到控制权。

这种多任务系统也就称为协同式的多任务系统。Windows3.X就是这种系统。 而32位的系统中每一运行的程序都会有一个消息队列,所以系统可以在多个消息队列中转换而不必等待当前程序完成消息处理就可以得到控制权。这种多任务系统就称为抢先式的多任务系统。Windows95/NT就是这种系统。 1.3 利用Visual C++/MFC开发Windows程序的优势 MFC借助C++的优势为Windows开发开辟了一片新天地,同时也借助ApplicationWizzard使开发者摆脱离了那些每次都必写基本代码,借助ClassWizard和消息映射使开发者摆脱了定义消息处理时那种混乱和冗长的代码段。更令人兴奋的是利用C++的封装功能使开发者摆脱Windows中各种句柄的困扰,只需要面对C++中的对象,这样一来使开发更接近开发语言而远离系统。(但我个人认为了解系统原理对开发很有帮助) 正因为MFC是建立在C++的基础上,所以我强调C/C++语言基础对开发的重要性。

利用C++的封装性开发者可以更容易理解和操作各种窗口对象;利用C++的派生性开发者可以减少开发自定义窗口的时间和创造出可重用的代码;利用虚拟性可以在必要时更好的控制窗口的活动。而且C++本身所具备的超越C语言的特性都可以使开发者编写出更易用,更灵活的代码。 在MFC中对消息的处理利用了消息映射的方法,该方法的基础是宏定义实现,通过宏定义将消息分派到不同的成员函数进行处理。下面简单讲述一下这种方法的实现方法: 代码如下 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() //}}AFX_MSG_MAP ON_COMMAND(ID_FONT_DROPDOWN, DoNothing) END_MESSAGE_MAP() 经过编译后,代码被替换为如下形式(这只是作讲解,实际情况比这复杂得多): //BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) CMainFrame::newWndProc(...) { switch(...) { //{{AFX_MSG_MAP(CMainFrame) // ON_WM_CREATE() case(WM_CREATE): OnCreate(...); break; //}}AFX_MSG_MAP // ON_COMMAND(ID_FONT_DROPDOWN, DoNothing) case(WM_COMMAND): if(HIWORD(wP)==ID_FONT_DROPDOWN) { DoNothing(...); } break; //END_MESSAGE_MAP() } } newWndProc就是窗口过程只要是该类的实例生成的窗口都使用该窗口过程。

所以了解了Windows的消息机制在加上对消息映射的理解就很容易了解MFC开发的基本思路了。 1.4 利用MFC进行开发的通用方法介绍

如何编译驱动程序

驱动的编译和上层应用程序的编译完全不同,作为初学者应该先了解一下,即使你还不懂得怎么写驱动程序。

首先安装DDK,然后随便找一个例子来测试。在菜单中找到BUILD环境菜单执行,不同的系统要使用不同的BUILD环境。会打开一个DOS窗口,这时CD到那个例子程序,输入 build –cZ回车就可以了。 驱动程序都是用一个由DDK提供的叫build.exe的工具编译的。此程序以一个名为SOURCES的文件作为输入,该文件中包含目标可执行文件的名称、类型和要创建的可执行文件的路径,注意这个文件没有后缀名。

SOURCES的文件格式:

TARGETNAME=drivername ,

- 本参数用于指定生成的设备驱动程序名称(不需后缀名),所产生的文件

- 为drivername.sys.

TARGETPATH=./lib

- 本参数用于指定生成的设备驱动程序所存放的路径. 一般采用./lib.

TARGETTYPE=DRIVER

- build能够生成许多不同的目标对象,设备驱动程序一般选用 DRIVER.

INCLUDES=path1;path2;...

- 本参数是可选的, 用于指定其他的#include文件的搜索路径.

TARGETLIBS=lib1;lib2;...

- 本参数是可选的, 用于指定其他的lib库文件的搜索路径.

SOURCES=file1.c file2.c ...

- 本参数用于指定需被编译的全部源文件名称, 后缀名不能省略,文件名之间用空格分开.

SOURCES文件是必需的,如果没有它则表示没有任何源文件需要编译。

如果要换行可以用 ‘/’ 符号,表示对上一行的继续。

也可以创建DIRS文件,DIRS文件用于指定在当前目录下必须创建的子目录。

DIRS文件格式:

DIRS文件的内容由一系列用空格分开的目录名组成

DIRS = /

subdir1 /

subdir2 /

subdir3

DIRS文件是可选的。

有的时候,会提示找不到依赖的文件(.h,.lib 之类),其实设置好 source 文件的

INCLUDES和TARGETLIBS就可以,我第一次编译时就碰到这个问题,和VC环境区别较大,但习惯就好。

如何编写网卡的驱动程序

Linux操作系统网络驱动程序编写 一.Linux系统设备驱动程序概述 1.1 Linux设备驱动程序分类 1.2 编写驱动程序的一些基本概念 二.Linux系统网络设备驱动程序 2.1 网络驱动程序的结构 2.2 网络驱动程序的基本方法 2.3 网络驱动程序中用到的数据结构 2.4 常用的系统支持 三.编写Linux网络驱动程序中可能遇到的问题 3.1 中断共享 3.2 硬件发送忙时的处理 3.3 流量控制(flow control) 3.4 调试 四.进一步的阅读 五.杂项 一.Linux系统设备驱动程序概述 1.1 Linux设备驱动程序分类 Linux设备驱动程序在Linux的内核源代码中占有很大的比例,源代码的长度日 益增加,主要是驱动程序的增加。在Linux内核的不断升级过程中,驱动程序的结构 还是相对稳定。在2.0.xx到2.2.xx的变动里,驱动程序的编写做了一些改变,但是 从2.0.xx的驱动到2.2.xx的移植只需做少量的工作。

Linux系统的设备分为字符设备(char device),块设备(block device)和网络 设备(network device)三种。字符设备是指存取时没有缓存的设备。块设备的读写 都有缓存来支持,并且块设备必须能够随机存取(random access),字符设备则没有 这个要求。典型的字符设备包括鼠标,键盘,串行口等。块设备主要包括硬盘软盘 设备,CD-ROM等。一个文件系统要安装进入操作系统必须在块设备上。 网络设备在Linux里做专门的处理。Linux的网络系统主要是基于BSD unix的socket 机制。在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据的传递。系 统里支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的支持。 1.2 编写驱动程序的一些基本概念 无论是什么操作系统的驱动程序,都有一些通用的概念。

操作系统提供给驱动 程序的支持也大致相同。下面简单介绍一下网络设备驱动程序的一些基本要求。 1.2.1 发送和接收 这是一个网络设备最基本的功能。一块网卡所做的无非就是收发工作。所以驱 动程序里要告诉系统你的发送函数在哪里,系统在有数据要发送时就会调用你的发 送程序。还有驱动程序由于是直接操纵硬件的,所以网络硬件有数据收到最先能得 到这个数据的也就是驱动程序,它负责把这些原始数据进行必要的处理然后送给系 统。这里,操作系统必须要提供两个机制,一个是找到驱动程序的发送函数,一个 是驱动程序把收到的数据送给系统。 1.2.2 中断 中断在现代计算机结构中有重要的地位。操作系统必须提供驱动程序响应中断 的能力。一般是把一个中断处理程序注册到系统中去。

操作系统在硬件中断发生后 调用驱动程序的处理程序。Linux支持中断的共享,即多个设备共享一个中断。 1.2.3 时钟 在实现驱动程序时,很多地方会用到时钟。如某些协议里的超时处理,没有中 断机制的硬件的轮询等。操作系统应为驱动程序提供定时机制。一般是在预定的时 间过了以后回调注册的时钟函数。在网络驱动程序中,如果硬件没有中断功能,定 时器可以提供轮询(poll)方式对硬件进行存取。或者是实现某些协议时需要的超时 重传等。 二.Linux系统网络设备驱动程序 2.1 网络驱动程序的结构 所有的Linux网络驱动程序遵循通用的接口。设计时采用的是面向对象的方法。 一个设备就是一个对象(device 结构),它内部有自己的数据和方法。每一个设备的 方法被调用时的第一个参数都是这个设备对象本身。

这样这个方法就可以存取自身 的数据(类似面向对象程序设计时的this引用)。 一个网络设备最基本的方法有初始化、发送和接收。 ------------------- --------------------- |deliver packets | |receive packets queue| |(dev_queue_xmit()) | |them(netif_rx()) | ------------------- --------------------- | | / / | | ------------------------------------------------------- | methods and variables(initialize,open,close,hard_xmit,| | interrupt handler,config,resources,status...) | ------------------------------------------------------- | | / / | | ----------------- ---------------------- |send to hardware | |receivce from hardware| ----------------- ---------------------- | | / / | | ----------------------------------------------------- | hardware media | ----------------------------------------------------- 初始化程序完成硬件的初始化、device中变量的初始化和系统资源的申请。

发送 程序是在驱动程序的上层协议层有数据要发送时自动调用的。一般驱动程序中不对发 送数据进行缓存,而是直接使用硬件的发送功能把数据发送出去。接收数据一般是通 过硬件中断来通知的。在中断处理程序里,把硬件帧信息填入一个skbuff结构中,然 ------------------ Linux操作系统网络驱动程序编写 ------------------- ------------ Contact the author by mailto:bordibordi.dhs.org ------ 后调用netif_rx()传递给上层处理。 2.2 网络驱动程序的基本方法 网络设备做为一个对象,提供一些方法供系统访问。正是这些有统一接口的方法, 掩蔽了硬件的具体细节,让系统对各种网络设备的访问都采用统一的形式,做到硬件 无关性。 下面解释最基本的方法。 2.2.1 初始化(initialize) 驱动程序必须有一个初始化方法。

在把驱动程序载入系统的时候会调用这个初 始化程序。它做以下几方面的工作。检测设备。在初始化程序里你可以根据硬件的 特征检查硬件是否存在,...

以下为关联文档:

如何在空间添加音乐→→ 、拥有音乐播放器:点击右上角“装扮空间”-搜索-关键字(blue)-类别(播放器)-点选-保存。 2.复制歌曲链接:小浠找网络歌曲的时候,一般都在找链接,-。-所以大家就先看着这个吧!-MP...

如何在excel统计某个数字在里面连续出现的次数方法1: 假设数据在A列 B1输入 =COUNTIF(A:A,A1) 公式下拉复制。 *B列显示各个数字在A列出现的次数。 方法2 1.加上标题,如:数字。 2.选择A列,【数据】-【数据透视表】-完成。...

Visual FoxPro中用于统计数据库表中的记录个数的函数是什么SO_REUSEADDR选项 SO_REUSEADDR选项的用途有多中,我们只讨论这里使用到的功能。先来看看UNP V1对这种情况的描述。 SO_REUSEADDR允许启动一个监听服务器并捆绑其众所周知端口...

如何使用visual studio 2015开发安卓应用方法/步骤 1 首先在开始按钮处启动visual studio 2015软件。 如何使用visual studio 2015开发安卓应用 2 在软件的主界面中选择创建新的工程,如图所示。 如何使用visual stud...

请教高手用Visual LISP较为简单的开发CAD实例谁能给我几个!急(defun c:dq ( / &mod ) (if (null vlax-dump-object) (vl-load-com) ) (if (null &mod) (setq &mod (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)...

如何在管理中实现有效沟通求解?如何在管理中实现有效沟通求解有效沟通,就是传递和交流可靠性、准确性高的信息或思想的传递和交换的过程。它是组织管理活动中最重要的组成部分。领导与沟通密不可分,有效的沟通意味着良好的管理,成功的领导...

Microsoft Visual FoxPro程序出错这是数据文件在运行时遇到突然情况如断电等时,数据被破坏的缘故。解决的办法: 1、找出是哪一个文件损坏。点击项目管理器中数据选项卡,在列出表中一个一个地点击,进行“修改”操...

如何Visual Foxpro在项目管理器设置新项目为主项目主文件是“项目管理器”的主控程序,是整个应用程序的起点。在Visual FoxPro中必须指定一个主文件,作为程序执行的起始点。它应当是一个可执行的程序,这样的程序可以调用相应的...

如何在psp上安装在电脑上下载的游戏如何在psp上安装在电脑上下载的游戏:首先请确保您的PSP是自制系统,然后将下载好的ISO、CSO格式的文件后存放在记忆棒根目录下的ISO文件夹里即可,随后在PSP系统画面的游戏项里选...

推荐阅读
图文推荐