<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>C | Hessian's Blog</title><link>https://hessian.cn/tag/c</link><description>Hessian 的技术笔记：Linux、C++、网络与嵌入式</description><language>zh-CN</language><atom:link href="https://hessian.cn/tag/c/index.xml" rel="self" type="application/rss+xml"/><item><title>VC++编程实现对火焰的计算机动态仿真</title><link>https://hessian.cn/p/541.html</link><pubDate>Fri, 11 May 2007 17:07:00 +0800</pubDate><guid>https://hessian.cn/p/541.html</guid><description>摘要：本文通过对真实火焰物理特性的分析，建立了火焰动态燃烧的数学模型，并在此数学模型基础之上借助于DirectDraw技术对图形显示的加速，在VC++ 6.0下对火焰作了效果非常逼真的计算机动态仿真。&#10;</description></item><item><title>Visual C++ MFC 简明教程 [3]</title><link>https://hessian.cn/p/560.html</link><pubDate>Wed, 18 Apr 2007 07:08:00 +0800</pubDate><guid>https://hessian.cn/p/560.html</guid><description>CButton类 在上一讲中所讨论的CStatic控制是唯一不响应用户时间的控制。Windows中所有的其它控制都可响应用户事件。第一，当用户处理它们时， 它们会自动更新其外观(例如，当用户单击按钮时，按钮会自己加亮以给用户一个反馈)。第二，每个不同的控制都要发送信息给你的代码以使程序能响应用户的需 要。例如，当单击按钮时，按钮就会发送一个命令消息。如果你编写代码接收消息，则你的代码就能响应用户事件。 为了理解这个过程，我们从CButton控制开始。下面的代码说明了建立按钮的过程： // button1.cpp #include #define IDB_BUTTON 100 // Declare the application class class CButtonApp : public CWinApp { public: virtual BOOL InitInstance(); }; // Create an instance of the application class CButtonApp ButtonApp; // Declare the main window class class CButtonWindow : public CFrameWnd { CButton *button; public: CButtonWindow(); }; // The InitInstance function is called once // when the application first executes BOOL CButtonApp::InitInstance() { m_pMainWnd = new CButtonWindow(); m_pMainWnd-&gt;ShowWindow(m_nCmdShow); m_pMainWnd-&gt;UpdateWindow(); return TRUE; } // The constructor for the window class CButtonWindow::CButtonWindow() { CRect r; // Create the window itself Create(NULL, "CButton Tests", WS_OVERLAPPEDWINDOW, CRect(0,0,200,200));</description></item><item><title>Visual C++ MFC 简明教程 [1]</title><link>https://hessian.cn/p/469.html</link><pubDate>Wed, 18 Apr 2007 07:07:00 +0800</pubDate><guid>https://hessian.cn/p/469.html</guid><description>Visual C++ MFC 简明教程 第一部分：MFC导论 Visual C++ 不仅仅是一个编译器。它是一个全面的应用程序开发环境，使用它你充分利用具有面向对象特性的 C++ 来开发出专业级的 Windows 应用程序。为了能充分利用这些特性，你必须理解 C++ 程序设计语言。掌握了C++，你就必须掌握 Microsoft 基本类库 (MFC) 的层次结构。该层次 结构包容了 Windows API 中的用户界面部分，并使你能够很容易地以面向对象的方式建立 Windows 应用程序。这种层次结构适用于所有版本的 Windows 并彼此兼容。你用 MFC 所建立的代码是完全可移植的。 该教程将向你介绍MFC的基本概念和术语以及事件驱动程序设计方法。在本节中，你将会输入、编译和运行一个简单的MFC程序。下一节中将向你详细解释这些代码。第三部分讨论了MFC控制和如何定制它们。第四部分将介绍消息映射，你将会处理MFC的事件。</description></item><item><title>Visual C++ MFC 简明教程 [2]</title><link>https://hessian.cn/p/336.html</link><pubDate>Wed, 18 Apr 2007 07:07:00 +0800</pubDate><guid>https://hessian.cn/p/336.html</guid><description>窗口对象 MFC 定义了两个类型的窗口: 1) 框架窗口，它是一个全功能的窗口，可以改变大小、最小化、最大化等等; 2) 对话框窗口，它不能改变大小。框架窗口是典型的主应用程序窗口。 在下面的代码中，从 CFrameWnd 中继承了一个新的类 CHelloWindow: 11 // Declare the main window class 12 class CHelloWindow : public CFrameWnd 13 { 14 CStatic* cs; 15 public: 16 CHelloWindow(); 17 }; 它包括一个新的构造函数，同时还有一个指向程序中所使用的唯一用户界面控制的数据成员。你多建立的每个应用程序在主窗口中都会有唯一的一组控制。 因此，继承类将有一个重载的构造函数以用来建立主窗口所需要的所有控制。典型情况下，该类会包含有一个析构函数以便在窗口关闭时来删除他们。我们这里没有 使用析构函数。在第四讲中，我们将会看到继承窗口类也会说明一个消息处理函数来处理这些控制在响应用户事件所产生的消息。 典型地，一个应用程序将有一个主应用程序窗口。因此，CHelloApp 应用程序类定义了一个名为 m_pMainWnd 成员变量来指向主窗口。为了建立该程序的主窗口，InitInstance 函数(第18至26行)建立了一个 CHelloWindow 事例，并使用 m_pMainWnd 来指向一个新的窗口。我们的 CHelloWindow 对象是在第22行建立的: 18 // The InitInstance function is called each 19 // time the application first executes. 20 BOOL CHelloApp::InitInstance() 21 { 22 m_pMainWnd = new CHelloWindow(); 23 m_pMainWnd-&gt;ShowWindow(m_nCmdShow); 24 m_pMainWnd-&gt;UpdateWindow(); 25 return TRUE; 26 } 只建立一个简单的框架窗口是不够的。还要确保窗口能正确地出现在屏幕上。首先，代码必须要调用窗口的 ShowWindow 函数以使窗口出现在屏幕上(第23行)。其次，程序必须要调用 UpdateWindow 函数来确保窗口中的每个控制和输出能正确地出现在屏幕上(第24行)。 你可能奇怪，ShowWindow 和 UpdateWindow 函数是在哪儿定义的。例如，如果你要查看以便了解它们，你可能要查看 MFC 的帮助文件中的 CFrameWnd 定义部分。但是 CFrameWnd 中并不包含有这些成员函数。CFrameWnd 是从 CWnd 类继承来的。你可以查看 MFC 文档中的 CWnd，你会发现它包含有200多个不同的成员函数。显然，你不能在几分钟内掌握这些函数，但是你可以掌握其中的几个，如 ShowWindow 和UpdateWindow。 现在让我们花几分钟来看一下 MFC 帮助文件中的 CWnd::ShowWindow 函数。为此，你你可以单击帮助文件中的 Search 按钮，并输入“ShowWindow”。找到后，你会注意到，ShowWindow 只有一个参数，你可以设置不同的参数值。我们把它设置成我们程序中 CHelloApp 的数据成员变量 m_nCmdShow (第23行)。m_nCmdShow 变量是用来初始化应用程序启动的窗口显示方式的。例如，用户可能在程序管理器中启动应用程序，并可通过应用程序属性对话框来告知程序管理器应用程序在启动 时要保持最小化状态。m_nCmdShow 变量将被设置成 SW_SHOWMINIMIZED，并且应用程序会以图标的形式来启动，也就是说，程序启动后，是一个代表该程序的图标。m_nCmdShow 变量是一种外界与应用程序通讯的方式。如果你愿意，你可以用不同的 m_nCmdShow 值来试验 ShowWindow 的效果。但要重新编译程序才能看到效果。 第22行是初始化窗口。它为调用 new 函数分配内存。在这一点上，程序在执行时会调用CHelloWindow的构造函数。该构造函数在每次带类的事例被分配时都要调用。在窗口构造函数的内 部，窗口必须建立它自己。它是通过调用 CFrameWnd 的 Create 成员函数来实现的(第31行): 27 // The constructor for the window class 28 CHelloWindow::CHelloWindow() 29 { 30 // Create the window itself 31 Create(NULL, 32 "Hello World!", 33 WS_OVERLAPPEDWINDOW, 34 CRect(0,0,200,200)); 建立函数共传递了四个参数。通过查看 MFC 文档，你可以了解不同类型。NULL 参数表示使用缺省的类名。第二个参数为出现在窗口标题栏上的标题。第三个参数为窗口的类型属性。该程序使用了正常的、可覆盖类型的窗口。在下一讲中将详细 介绍类型属性。第四个参数指出窗口应该放在屏幕上的位置和大小，左上角为(0,0), 初始化大小为 200×200个象素。如果使用了 rectDefault，则 Windows 会为你自动放置窗口及大小。 因为我们的程序太简单了，所以它只在窗口中建立了一个静态文本控制。见第35至40行。下面将详细介绍。</description></item><item><title>递归的应用 — 最简单分形图形实现</title><link>https://hessian.cn/p/376.html</link><pubDate>Wed, 18 Apr 2007 03:50:00 +0800</pubDate><guid>https://hessian.cn/p/376.html</guid><description>作者：吉林大学　胡卓玮&#10;下载本文源代码&#10;图一 例子代码运行结果     大家在C/C++学习时都会遇到递归，课本上以汗诺塔为例进行讲解，然后大家都希望自己找到一个递归的实例。本文以一个最简单的分形图形来讲解递归的实现过程。&#10;    先来看看绘制这个分形图形的思路。如图二所示，给定两点（p1和p2）确定一条直线，计算这条直线的长度，如果长度小于预先设定的极限值则将这两个点用直 线相连，否则，取其1/3处点（点1）、2/3处点（点2），以及中点上方一个点（点3），这个点与第1点、第2点构成的直线与直线p1p2的夹角为60 度。判断这五个点按照顺序形成的四条直线的长度是否小于预先设定的极限值，如果小于，则在将相应的两个点相连在屏幕上显示一条直线，否则继续对相应两点形 成的直线进行以上判断。&#10;</description></item><item><title>启程动态数组V2.0</title><link>https://hessian.cn/p/522.html</link><pubDate>Wed, 18 Apr 2007 03:49:00 +0800</pubDate><guid>https://hessian.cn/p/522.html</guid><description>作者：黄建雄&#10;下载源代码&#10;简介&#10;大量数据的管理是很多程序员的心病，很难找到一个速度快、效率高、支持超大规模数据的表，在1.0版本的基础上，启程花血本写下了这个强化了数据插入 与删除的修正版，启程动态数组是一个功能强大的列表形数据管理链表，利用它可以轻松实现超大数据量的随机插入、删除、修改等操作，它另外一个特点就是速度 极快，内存利用率高。&#10;大量数据的管理必然需要占用大量的内存空间，如果这些数据占用的空间大小是随各种条件变化的，我们就不能使用数组来管理这些数据了（道理就不多说 了），这时我们需要一个动态数组。MFC提供了一个很好的动态数组类CArray，对于少量数据，使用CArray就足够好用了，但是对于大量数据 （10W级）它就力不从心了，因为它的本质就是一个数组，只不过对常用的插入、删除等操作进行了一个复杂的包装。为了解决这个问题，启程动态数组开创性地 将链表与数组巧妙的结合起来，既有数组的高速随机索引的优点，又有链表的数据量灵活多变的特点。&#10;</description></item><item><title>URL编码</title><link>https://hessian.cn/p/467.html</link><pubDate>Wed, 18 Apr 2007 03:48:00 +0800</pubDate><guid>https://hessian.cn/p/467.html</guid><description>作者： Chandrasekhar Vuppalapati 翻译：eastvc&#10;下载源代码&#10;本文的目的是设计一个完成URL编码的C++类。在我曾经的项目中，我需要从VC++ 6.0应用程序中POST数据，而这些数据需要进行URL编码。我在MSDN中查找能根据提供的字符串生成URL编码的相关类或API，但我没有找到，因 此我必须设计一个自己的URLEncode C++类。&#10;</description></item><item><title>简单快速的哈夫曼编码</title><link>https://hessian.cn/p/304.html</link><pubDate>Wed, 18 Apr 2007 03:48:00 +0800</pubDate><guid>https://hessian.cn/p/304.html</guid><description>作者：Hatem Mostafa 译者：happyparrot&#10;下载源代码&#10;介绍&#10;本文描述在网上能够找到的最简单，最快速的哈夫曼编码。本方法不使用任何扩展动态库，比如STL或者组件。只使用简单的C函数，比如：memset，memmove，qsort，malloc，realloc和memcpy。&#10;</description></item><item><title>VC++中用内存映射文件</title><link>https://hessian.cn/p/613.html</link><pubDate>Wed, 18 Apr 2007 03:37:00 +0800</pubDate><guid>https://hessian.cn/p/613.html</guid><description>在软件的开发过程中，有时需要控制一些程序使他们不能同时运行，也就是多个程序间互斥运行（还包括禁止同一程序运行多个实例）。针对这一问题，我们在Visual C++6.0中利用内存映射文件实现了多个程序间的互斥运行。内存映射文件可以创建一个没有和磁盘文件相联系的内存对象，将文件的信息映射到一个进程的地址空间上，我们可以访问该文件中的数据，就如同它位于内存中一样。同时，在程序设计中可以给内存映射文件对象起一个名字，这个名字在整个系统中是唯一的，这个名字可以在多个进程之间共享，通过名字共享能实现进行信息交换，进而实现多个程序间的互斥运行。&#10;</description></item><item><title>如何将一个文件分割成多个小文件</title><link>https://hessian.cn/p/632.html</link><pubDate>Wed, 18 Apr 2007 03:28:00 +0800</pubDate><guid>https://hessian.cn/p/632.html</guid><description>   你也许会遇到到这样一个问题？当你有一个较大的软件，而无法用一张软盘将其全部拷下时，你也许会想到该将它分解开，分盘拷回去后，再将它们合并起来。现在的这种分割工具很多，你想自己动手做一个适合自己的分割工具么？下面就让我用以前用VC做的一个＜袖珍文件分割器＞的例程来告诉你吧！程序运行后界面如下图： 基本构成思想：文件分割的基本思想比我之前发表的另一篇文章＜如何将多个文件合并为一个可执行程序＞的构成思想简单多了，它主要也分为分割文件和合并分割后的文件二大部分。分割文件，将原文件按指定分割大小进行等分，然后顺序读取其指定分割大小数据后到写到各自的新建文件中。合并文件，将各分割后的文件顺序读取后，写入到一个文件中既可。</description></item><item><title>用Visual C++操作INI文件</title><link>https://hessian.cn/p/331.html</link><pubDate>Wed, 18 Apr 2007 03:27:00 +0800</pubDate><guid>https://hessian.cn/p/331.html</guid><description>在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应用如下:&#10;</description></item><item><title>PE 格式学习总结（四）– PE文件中的资源</title><link>https://hessian.cn/p/354.html</link><pubDate>Wed, 18 Apr 2007 03:23:00 +0800</pubDate><guid>https://hessian.cn/p/354.html</guid><description>    程序所用到的各种资源，比如 bmp,cursor,menu,对话框等都存在PE文件中。&#10;    我们将详细介绍关于资源的各种结构，通过一个例子来说明资源及其相关结构是怎么放在PE文件中的。以及如何在遍历PE文件中的所有资源。我们只最终找到这些资源在文件中的位置和长度。而不具体分析某种资源的格式，比如有个BMP的资源，我们不分析BMP格式。</description></item><item><title>PE 格式学习总结（三）– PE文件中的输入函数</title><link>https://hessian.cn/p/382.html</link><pubDate>Wed, 18 Apr 2007 03:22:00 +0800</pubDate><guid>https://hessian.cn/p/382.html</guid><description>    关于输入部分，我们将详细介绍关于输入函数的各种结构，通过一个例子来说明输入函数及其相关结构是怎么放在PE文件中的。以及如何在PE文件中找到这些东西。</description></item><item><title>PE 格式学习总结（二）– PE文件中的输出函数</title><link>https://hessian.cn/p/649.html</link><pubDate>Wed, 18 Apr 2007 03:17:00 +0800</pubDate><guid>https://hessian.cn/p/649.html</guid><description>    一般来说输出函数都是在dll中。我们将详细介绍关于输出函数的各种结构，通过一个例子来说明输出函数及其相关结构是怎么放在PE文件中的。以及如何在PE文件中找到这些东西。</description></item><item><title>PE 格式学习总结（一）– PE文件概述</title><link>https://hessian.cn/p/328.html</link><pubDate>Wed, 18 Apr 2007 03:16:00 +0800</pubDate><guid>https://hessian.cn/p/328.html</guid><description>零 前言     PE格式，是Windows的可执行文件的格式。Windows中的 exe文件，dll文件，都是PE格式。PE 就是Portable Executable 的缩写。Portable 是指对于不同的Windows版本和不同的CPU类型上PE文件的格式是一样的，当然CPU不一样了，CPU指令的二进制编码是不一样的。只是文件中各种 东西的布局是一样的。&#10;</description></item><item><title>[转]visual c++对大型数据文件的读取</title><link>https://hessian.cn/p/401.html</link><pubDate>Wed, 18 Apr 2007 02:59:00 +0800</pubDate><guid>https://hessian.cn/p/401.html</guid><description>　笔者前不久曾遇到一个问题，解决之后的经验愿与大家分享。问题是这样的，有一批数据文件，数据格式如下：&#10;日期,开盘,最高,最低,收盘,成交量,成交金额 1996年5月13日,636.96,636.96,636.96,636.96,0,0,&#10;</description></item><item><title>在Windows桌面创建快捷方式</title><link>https://hessian.cn/p/598.html</link><pubDate>Wed, 18 Apr 2007 02:27:00 +0800</pubDate><guid>https://hessian.cn/p/598.html</guid><description>API提供了一个叫做IShellLink的COM接口允许我们创建快捷方式。为在桌面创建快捷方式，我们创建一个IShellLink对象，设置它的属性，然后把这个link保存到desktop目录。&#10;下面的例子代码演示了怎样创建一个快捷方式。在这个例子里，这个快捷方式保存在C:根目录下。&#10;//———————————————————————-&#10;#define NO_WIN32_LEAN_AND_MEAN&#10;#include &lt;shlobj.h&gt;&#10;#include &lt;vcl.h&gt;&#10;#pragma hdrstop&#10;</description></item><item><title>Visual C++中实现对图像数据的读取显示</title><link>https://hessian.cn/p/324.html</link><pubDate>Wed, 18 Apr 2007 02:21:00 +0800</pubDate><guid>https://hessian.cn/p/324.html</guid><description>在利用VC进行数据库编程时，经常需要处理数据库中的图像数据，将该图像从数据库中读取出来并显示，图像数据与 文本字段不同，它是作为OLE字段在数据库中存储，通过数据集对象的成员变量自动交换得到的图像数据，得到的数据并不能直接显示，如何处理图像数据，一直 是数据库编程中的一个难点，目前关于VC进行数据库编程的资料不少，但很少涉及图像数据的操作，笔者针对一现状，结合自己开发的一个项目，解决了如何显示 数据库中的图像这一问题，本文以操作ACESS数据库为例子，讲解一下自己的实现思路，希望对爱好VC编程的朋友们有所帮助，以起到抛砖引玉的作用。&#10;</description></item><item><title>几种VC++数据库开发技术的比较</title><link>https://hessian.cn/p/441.html</link><pubDate>Wed, 18 Apr 2007 02:21:00 +0800</pubDate><guid>https://hessian.cn/p/441.html</guid><description>　从功能简单的数据库(如Jet Engine)到复杂的大型数据库系统(如oracle)，VC++6.0都提供了一些编程接口。本文主要介绍以下五种:&#10;</description></item><item><title>Visual C++ 中的ODBC编程</title><link>https://hessian.cn/p/562.html</link><pubDate>Wed, 18 Apr 2007 02:20:00 +0800</pubDate><guid>https://hessian.cn/p/562.html</guid><description> ODBC（Open Database Connectivity，开放式数据库连接），是一种用来在相关或不相关的数据库管理系统（DBMS）中存取数据的标准应用程序接口（API）。本文给 出Windows 95 环境下用Visual C++ 进行ODBC 编程的具体方法及技巧。&#10;</description></item><item><title>利用Active X控件开发串口通信软件</title><link>https://hessian.cn/p/309.html</link><pubDate>Wed, 18 Apr 2007 02:18:00 +0800</pubDate><guid>https://hessian.cn/p/309.html</guid><description>　摘要：本文介绍了在Microsoft Visual C++ 6.0环境下通过对Active X控件的编程来实现串口的通信的一般方法。&#10;一、 引言&#10;当我们在Windows操作系统下开发串行通信程序时通常不得不面对许多复杂的API函数，因为在Windows操作系统下不能直接对设备端口进行操 作，也不能在系统级（Ring 3级别）使用任何DOS或BIOS中断，如要对端口进行编程则只能以文件的形式来对端口进行操作，这就使开发人员不得不面对非常烦琐的API函数编程。本 文对此提出了另外一种封装性很好的使用Microsoft Visual C++ 6.0自带的"Microsoft Communications Control，version 6.0"Active X控件的编程方法，通过对该控件的正确使用，我们可以比较轻松地编写出所需的串行通信程序。&#10;</description></item><item><title>通过COM技术实现Windows外壳编程</title><link>https://hessian.cn/p/373.html</link><pubDate>Wed, 18 Apr 2007 02:16:00 +0800</pubDate><guid>https://hessian.cn/p/373.html</guid><description>　摘要：本文介绍了一种有别于通常的Windows外壳编程方法。采用COM技术，通过Windows提供的外壳接口实现对其的编程。&#10;一、 引言&#10;在Windows环境下，不论是使用Visual C++还是Delphi或是其他一些软件开发工具，尽管存在着差别，但有一点是相同的：都是运行于Windows操作系统之下的。在程序开发过程中也经常 要在自己的应用程序中加入一些Windows系统本身就有的功能，比如文件的拷贝、删除、查找以及运行程序等等。而这些功能在Windows操作系统下都 是具备的，显然如果能直接从系统中调用这些功能将不仅仅减少程序的大小和开发人员的工作量，而且由于是直接通过操作系统来完成这些功能，将会大大减小这部 分程序出现异常错误的概率。Windows系统虽说也存在不少错误，但常用功能的错误还是比较少的，而且通过补丁程序可以更低限度减少系统错误，因此程序 员可以将调试检错的注意力放在应用程序的其他地方，对于调用系统功能这部分代码则可以不必投入太大的精力去调试，因为这部分调试的工作在操作系统发布的时 候就已经由微软做好了。&#10;</description></item><item><title>CGI扫描器的原理和实现过程</title><link>https://hessian.cn/p/395.html</link><pubDate>Sun, 15 Apr 2007 19:32:00 +0800</pubDate><guid>https://hessian.cn/p/395.html</guid><description>有很多网站为了安全起见，在WEB Server前面架了防火墙，或者做了TCP/IP过滤，对外只开放TCP 80 端口。从入侵者角度来看，要入侵那 么从80上跑的CGI入手是比较可行的，当然也可以用别的办法，例如旁敲侧击，呵呵。从网管角度来看，一是要保证CGI的安全性，另外网络的整体安全性也 是很重要的。针对基于80端口入侵、防范而出的CGI扫描器数不胜数，但基本上原理都一样。&#10;CGI扫描器原理说起来其实非常简单，可以用四句话来概括：&lt;1&gt;连接目标WEB SERVER；&lt;2&gt;发送一个特殊的请求；&lt;3&gt;接收目标服务器返回数据；&lt;4&gt;根据返回数据判断目标服务器是否有此CGI漏洞。&#10;当管理的服务器达到一定数量的时候，手工检测自己的服务器是否存在各种各样的CGI漏洞，那就太消耗时间和精力了，所以一个网管手上有个比较好用的 CGI漏洞扫描器还是必要的。OK！今天我们就自己来动手用C写一个简单的CGI扫描器，帮助自己在日常工作中检测服务器：））&#10;</description></item><item><title>用VC++编写CGI程序</title><link>https://hessian.cn/p/530.html</link><pubDate>Sun, 15 Apr 2007 18:58:00 +0800</pubDate><guid>https://hessian.cn/p/530.html</guid><description>近年来,Internet与Intranet迅猛发展,企业纷纷建立自己的Intranet,以加强企业内部的联系,促进与外部世界的沟通,增强企业的竞 争能力。通过建立自己的Internet服务器,企业能在网络上发布广告,介绍本公司的情况与产品,收集顾客意见,以及建立虚拟电子商场等。大家都知道写 一个HTML超文本文件放在World Wide Web服务器上,即可通过各种浏览器访问你的主页,但是如何使你的静态主页能响应客户的动作,并与本地的数据库联系,将数据库的相应内容传送给远端的浏览 器呢?这就需要通过CGI接口进行联系。&#10;CGI全名是Common Gateway Interface,它是WWW服务器调用外部程序的接口通过CGI,WW W服务器能完成一些本身所力不能及的工作。&#10;</description></item><item><title>VC小技巧15则</title><link>https://hessian.cn/p/493.html</link><pubDate>Mon, 09 Apr 2007 21:13:00 +0800</pubDate><guid>https://hessian.cn/p/493.html</guid><description>一、 一次只运行一个程序实例&#10;下列两种方式都可以实现，建议采用第二种方式：&#10;1、 if( FindWindow(NULL,"程序标题"))          exit(0);&#10;2、BOOL CDemoTBarEApp::InstanceIsRun()&#10;{&#10;HANDLE m_hMutex;&#10;m_hMutex = ::CreateMutex(NULL, TRUE, _T("YourApplication"));&#10;ASSERT(m_hMutex);&#10;if (GetLastError() == ERROR_ALREADY_EXISTS)&#10;{&#10;m_hMutex = NULL;&#10;return TRUE;//实例已经运行&#10;}&#10;return FALSE;//实例未运行&#10;}&#10;</description></item><item><title>优秀IT书籍100本</title><link>https://hessian.cn/p/640.html</link><pubDate>Sat, 07 Apr 2007 14:51:00 +0800</pubDate><guid>https://hessian.cn/p/640.html</guid><description>1.vc++技术内幕第四版 (潘爱民) ftp://210.32.157.56/课件/c++primer/vc++技术内幕IV(潘爱民).rar 2.C++经典对话系列 中文：http://www.jka77.com/book/cvst_cn.chm</description></item><item><title>[转]TCP/IP 网络基础(v 0.2b)</title><link>https://hessian.cn/p/392.html</link><pubDate>Sat, 07 Apr 2007 14:46:00 +0800</pubDate><guid>https://hessian.cn/p/392.html</guid><description>作者：北南南北&#10;来自：LinuxSir.Org&#10;赞助： pandonny、etony、Linuxfish ……..&#10;简介：本文简要的讲了讲TCP/IP的一点基础，包括TCP/IP网络模型；网络分类及切割，以及服务和端口等基础知识；需要声明的是，我并不懂TCP/IP的原理，我只是写一点比较表面的东西。&#10;</description></item></channel></rss>