博文

2个串口同时与2个单片机进行通讯(2005-09-25 22:38:00)

摘要:给你一个串口类的框架,实现的代码由你自已根据情况完成。
其中的蓝色代码为你的实现函数,可以另写API的函数库或封装了MSCOMM控件的函数库。 Option Explicit Public Enum EnuBaudRate
   enuBaudRate_110 = 110
   enuBaudRate_300 = 300
   enuBaudRate_600 = 600
   enuBaudRate_1200 = 1200
   enuBaudRate_2400 = 2400
   enuBaudRate_4800 = 4800
   enuBaudRate_5208 = 5208
   enuBaudRate_9600 = 9600
   enuBaudRate_14400 = 14400
   enuBaudRate_19200 = 19200
   enuBaudRate_38400 = 38400
   enuBaudRate_56000 = 56000
   enuBaudRate_57600 = 57600
   enuBaudRate_115200 = 115200
   enuBaudRate_128000 = 128000
   enuBaudRate_256000 = 256000
End Enum Public Enum EnuParityCheck
   enuParityCheck_No = 0
   enuParityCheck_Odd = 1
   enuParityCheck_Even = 2
   enuParityCheck_Mark = 3
   enuParityCheck......

阅读全文(2604) | 评论:0

真想不到之六:有用的技术和没用的指针(2005-09-25 22:36:00)

摘要:真想不到之六:有用的技术和没用的指针
关键字:VB、SafeArray、数值类型指针
难度:中级
参考文章:
1、2000年7月VBPJ Black Belt专栏文章《Modify a Varialbe's Pointer》
   作者:Bill McCarthy

引言:
    这真的是指针专题的最后一篇了(当然,以后肯定还会提到指针)。主要是来谈谈Bill McCarthy的文章《Modify a Varialbe's Pointer》的精华。关于这篇文章的东西,在我的《VB指针葵花宝典之SafeArray》里曾谈到过,但那篇文章实际上没有写出SafeArray的精华,用SafeArray最妙的地方在于可以将一个变量建在指定的内存处,就象上一篇文章给出的那个字串类一样。

正文:   
    Bill McCarthy在那篇《Modify a Varialbe's Pointer》里用SafeArray实现多进程的数组共享内存,他考虑了数组变量的类型,因此可以兼容大部分数值类型的数组,是一个非常不错的东西。我这里不讲它实现的具体方法,只是想和大家一起看看SafeArray还能做什么。
    修改SafeArray结构的pvData指针却是一个非常有用的技术,通过修改pvData,就能够通过数组直接访问指定的内存。
    和上一篇文章包装字串指针类一样,通过修改pvData,我们也可以包装一些普通数值类型变量的指针类。
    我在指针的第一篇文章里说过,要想实现C语言里'*'这个取指针所指变量值功能,必须要用CopyMemory。实际上,我说错了,我们完全可以实现和C里一样的指针,如下:
//C语言
    Long L;
    Long* pL = &L;
 &......

阅读全文(1940) | 评论:0

真想不到之五:高效字串指针类(2005-09-25 22:36:00)

摘要:真想不到之五:高效字串指针类
关键字:VB、HCAK、字串指针、BSTR、效率、内存共享
难度:中级或高级
参考文章:
1、2000年7月VBPJ Black Belt专栏文章《Modify a Varialbe's Pointer》
   作者:Bill McCarthy
2、1998年4月VBPJ Black Belt专栏文章《Play VB's Strings》
   作者:Francesco Balena

引言:
    本想以内存共享做为VB指针专题的最后一篇,写着写着发现字串的问题应该单独谈谈。在内存共享的问题上,我尤其关心的是字串的共享,因为在我一个多月前发布的源码里用的是《HardCore VB》里Bruce Mckinney提供的CShareStr类,它实现了字串的内存共享。但是Bruce也没有突破局限,对字串的处理依然是CopyMemory的乾坤大挪移,尤其是还要进行讨厌的ANSI/DBCS和Unicode的转换。我在readme里说过它效率极低,应该采用Variant或Byte数组来实现,才能避免转换。后来又想到可以用StrPtr来做,并在VC里用DLL共享节实现了可以不进行转换的字串内存共享。不过在VC里我仍然需要用SysAllocString来建立VB能使用的BSTR。这都不是我想要的,我想要的东西要象VC里的CString的一样,只要字串够大,对其赋值就不用重新分配内存,还要象VC里CComBSTR类一样可以Attach到一个特定BSTR。
    知道该怎么做,是在看了VBPJ上Bill McCarthy和Francesco Balena的两篇文章之后。Bill用修改SafeArray描述结构实现了数组的内存共享,而Francesco则对字串指针进行深入的探讨。但是Bill和Francesco的东西都没有实现我想要的字串类。
    方法知道了,实现并不难,所以我决定自己来包装一个这样的东西。
     &n......

阅读全文(1884) | 评论:0

VB真是想不到系列之四:VB指针葵花宝典之SafeArray (2005-09-25 22:35:00)

摘要:VB真是想不到系列之四:VB指针葵花宝典之SafeArray
关键字:VB、HCAK、指针、SafeArray、数组指针、效率、数组、排序
难度:中级或高级
要求:熟悉VB,了解基本的排序算法,会用VC更好。

引言:
    上回说到,虽然指针的运用让我们的数组排序在性能上有了大大的提高,但是CopyMemory始终是我们心里一个挥之不去的阴影,因为它还是太慢。在C里我们用指针,从来都是来去自如,随心所欲,四两拨千斤;而在VB里,我们用指针却要瞻前顾后,哪怕一个字节都要用到CopyMemory乾坤大挪移,真累。今天我们就来看看,能不能让VB里的指针也能指哪儿打哪儿,学学VB指针的凌波微步。
    各位看官,您把茶端好了。
    
    一、帮VB做点COM家务事
    本系列开张第一篇里,我就曾说过VB的成功有一半的功劳要记到COM开发小组身上,COM可是M$公司打的一手好牌,从OLE到COM+,COM是近十年来M$最成功技术之一,所以有必要再吹它几句。
    COM组件对象模型就是VB的基础,Varinat、String、Current、Date这些数据类型都是COM的,我们用的CStr、CInt、CSng等Cxxx函数根本就是COM开发小组写的,甚至我们在VB里用的数学函数,COM里都有对应的VarxxxDiv、VarxxxAdd,VarxxxAbs。嘿嘿,VB开发小组非常聪明。我们也可以说COM的成功也有VB开发小组和天下无数VB程序员的功劳,Bill大叔英明地将COM和VB捆绑在一起了。
    所以说,学VB而不需要了解COM,你是幸福的,你享受着VB带给你的轻松写意,她把那些琐碎的家务事都干了,但同时你又是不幸的,因为你从来都不曾了解你爱的VB,若有一天VB对你发了脾气,你甚至不知该如何去安慰她。所以,本系列文章将拿出几大篇来教大家如何帮VB做点COM方面的家务事,以备不时之......

阅读全文(2464) | 评论:1

VB真是想不到系列之三:VB指针葵花宝典之函数指针 (2005-09-25 22:34:00)

摘要:VB真是想不到系列之三:VB指针葵花宝典之函数指针
关键字:VB、HCAK、指针、函数指针、效率、数组、对象、排序
难度:中级
要求:熟悉VB,了解基本的排序算法,会用VC更好。

引言:    
    不知大家在修习过本系列第二篇《VB指针葵花宝典》后有什么感想,是不是觉得宝典过于偏重内功心法,而少了厉害的招式。所以,今天本文将少讲道理,多讲招式。不过,还是请大家从名门正派的内功心法开始学起,否则会把九阴真经练成九阴白骨爪。
    今天,我们重点来谈谈函数指针的实际应用。
    接着上一篇文章,关于字串的问题,听CSDN上各位网友的建议,我不准备写什么《VB字符串全攻略》了,关于BSTR的结构,关于调用API时字串在UNICODE和ANSI之间的转换问题,请参考MSDN的Partial Books里的《Win32 API Programming with Visual Basic》里的第六章《Strings》。今天就让我们先忘掉字符串,专注于函数指针的处理上来。

    一、函数指针
    AddressOf得到一个VB内部的函数指针,我们可以将这个函数指针传递给需要回调这个函数的API,它的作用就是让外部的程序可以调用VB内部的函数。
    但是VB里函数指针的应用,远不象C里应用那么广泛,因为VB文档里仅介绍了如何将函数指针传递给API以实现回调,并没指出函数指针诸多神奇的功能,因为VB是不鼓励使用指针的,函数指针也不例外。
    首先让我们对函数指针的使用方式来分个类。
    1、回调。这是最基本也是最重要的功能。比如VB文档里介绍过的子类派生技术,它的核心就是两个API:SetWindowLong和CallWindowProc。
   &nbs......

阅读全文(1929) | 评论:0

VB真是想不到系列之二:VB《葵花宝典》--指针技术(2005-09-25 22:03:00)

摘要:VB真是想不到系列之二:VB《葵花宝典》--指针技术
关键字:VB、指针、动态内存分配、效率、安全
难度:中级至高级
要求:熟悉VB,掌握基本的C,了解汇编,了解内存分配原理。
    想当年东方不败,黑木崖密室一战,仅凭一根绣花针独战四大高手,神出鬼没,堪称天下武林第一高手。若想成为VB里的东方不败,熟习VB《葵花宝典》,掌握VB指针技术,乃是不二的法门。
    欲练神功,引刀……,其实掌握VB指针技术,并不需要那么痛苦。因为说穿了,也就那么几招,再勤加练习,终可至神出鬼没之境。废话少说,让我们先从指针的定义说起。
    
    一、指针是什么?
    不需要去找什么标准的定义,它就是一个32位整数,在C语言和在VB里都可以用Long类型来表示。在32位Windows平台下它和普通的32位长整型数没有什么不同,只不过它的值是一个内存地址,正是因为这个整数象针一样指向一个内存地址,所以就有了指针的概念。
    有统计表明,很大一部分程序缺陷和内存的错误访问有关。正是因为指针直接和内存打交道,所以指针一直以来被看成一个危险的东西。以至于不少语言,如著名的JAVA,都不提供对指针操作的支持,所有的内存访问方面的处理都由编译器来完成。而象C和C++,指针的使用则是基本功,指针给了程序员极大的自由去随心所欲地处理内存访问,很多非常巧妙的东西都要依靠指针技术来完成。
    关于一门高级的程序设计语言是不是应该取消指针操作,关于没有指针操作算不算一门语言的优点,我在这里不讨论,因为互联网上关于这方面的没有结果的讨论,已经造成了占用几个GB的资源。无论最终你是不是要下定决心修习指针技术《葵花宝典》,了解这门功夫总是有益处的。
    注意:在VB里,官方是不鼓励使用什么指针的,本文所讲的任何东西你都别指望取得官方的技术支持,一切都要靠我们自己的努力,一切都更刺激! <......

阅读全文(1770) | 评论:0

真是想不到系列之一:VB到底为我们做了什么? (2005-09-25 22:02:00)

摘要:真是想不到系列之一:VB到底为我们做了什么?
关键字:VB、底层、WIN32、API、COM
难度:中级
要求:熟悉VB,会用VC调试器,了解WIN32 SDK、COM。
   VB一直以来被认为有以下优缺点:优点是上手快、开发效率高;缺点是能力有限,运行效率低。

这正是有些软件把VB做为首选语言,而有些软件肯定不会用VB做的原因。而很多VC,DELPHI的程序

员都认为VB里搞开发不自由,它让我们做事变容易的同时,也让我们发挥的余地越来越小。的确,

简单和功能强大这两者本身就是一对矛盾。那怕一行代码不写,仅仅起动运行一个空窗体这样简单

动作,VB在底下就为我们做了大量复杂的工作(决不仅仅是注册窗口类、显示窗口、起动消息循环

这么简单),这些工作对程序员是透明的。我们在感谢VB开发小组对我们程序员体贴入微的同时,

不禁也要责怪为什么在文档中对这些底层的动作只字未提,虽然这些动作对最终的程序也许并无影

响,但我们拥有知情权,更何况这些动作有时的确会影响我们的工作(我将在本系列后面的《VB多

线程》中谈到这种影响)。
   然而,所有希望从本文得到"未公开技术秘密"的朋友你将会很失望,因为我能够知道的和你一样

多,我们所能做的一切就是站在外面来猜VB在里面做了什么?所以我决不是要带大家一起去将VB反

向工程,而是想通过猜想VB的内部工作来将一些原来比较模糊的概念搞清楚。作为一个系列的第一

篇文章,它的目的是为了后面的深入打下基础,所以我会在需要的时候指出我们必须掌握的知识点

,如果你不清楚,请及时地学习相关书籍来补课,具体见《参考书目》。
   最后,要声明我在本文中所做的各种实验和推断仅是我个人的观点,不能保证其正确性,并且不

承担任何相关的法律责任。
   好,开始吧!首先准备好我们的武器,我下面要使用的工具主要有:VB6中文企业版+SP5(废话

),还有SPY++、Dep......

阅读全文(3113) | 评论:0

VB 程序大揭秘 (2005-09-25 22:01:00)

摘要:VB 程序大揭秘   
   

   1.Visual Basic程序概况

  我用W32Dasm(Ver 8.93)解开一个比较复杂的VB程序,其中用到了许多API 函数比如GetPrivateProfileString、OSfCreateShellLink、SHBrowseForFolder 等来自很多DLL的API。解开以后却发现程序只用到了一个DLL:msvbvm50.dll(我用的还是VB5)!VC、Delphi等程序语言编译出的程序可是直接引用DLL的。经过研究发现程序使用了如下几个主要的来自MSVBVM50.dll的API:

rtcRandomize :Randomize 函数的对应API;
rtcMidCharVar :Mid 函数的对应API;
rtcLeftCharVar、rtcRightCharVar :看出来了吧,这些是Left、Right函数的对应API;
rtcUpperCaseVar :UCase 函数的对应API;
rtcKillFiles :Kill 语句的对应API;
rtcFileCopy :FileCopy 语句的对应API;
rtcFileLength :EOF、FileLen函数的对应API;
rtcGetTimer :Randomize Timer中获取Timer的对应API;
rtcShell :Shell函数的的对应API;
rtcMakeDir :MkDir 语句的对应API;
rtcRemoveDir :RmDir 语句的对应API;
rtcDir :Dir 函数的对应API;
rtcSpaceVar :Space 函数的对应API;

  没问题的人应该看出来了:VB的所有函数、语句、方法都是由调用MSVBVM50.dll 中的API实现的,一般是由“rtc”接上函数或语句的全名,涉及字符串的API一般还得在最后加上“Var”。另外还有一些函数是这样写的:

__vbaUbound : UBound 的对应API;
__vbaFileOp......

阅读全文(2520) | 评论:0

不用控件可以令VB程序XP化(2005-09-25 21:59:00)

摘要:以前用过不少XP控件,今天看到一片帖子讲到不用控件可以令VB程序XP化。不敢独享,建议长期置顶。


   虽然WindowsXP的界面非常华丽。但是令人遗憾的是,我们用VB写的程序除了菜单和窗口的外观是XP风格外, 其他控件还是一如既往的是普通风格。我想,有的程序在XP下有XP的风格,VB也一定有办法实现XP的风格。后来笔者在网上看到 一篇介绍XML的文章,又在网上找到了一篇实现XP风格的文章,经过自己的实践,终于找到了VB程序实现XP风格的办法。为了使 其他的网友不至于走像我这样的多的弯路,将此办法写出来,与大家共同提高!!
   作者:崔占民
   Email:CuiZM@163.com



   具体的实现方法如下:

   ①:在你的窗体加入代码。如果是多个窗口,可以将此代码放到模块中。

代码如下:
'声明API函数
Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
Private Sub FORM_Initialize()
  InitCommonControls
End Sub
   注意:千万不要在FORM_load()事件下写InitCommonControls这句话,否则你的窗体会启动 不了。(不要怪我没告诉你啊~~~~)

   ②:建立一个和你的.exe同名的.exe.manifest文件(假如:如果你最后编译好的文件名为Window XPStyle.exe,则建立一个文件名为WindowXPStyle.exe.manifest的文件),并且此文件必须存 在于和你Exe文件的同一目录下。


以WindowXPStyle.exe为例,则这个WindowXPStyle.exe.manifest的文件的内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

阅读全文(3369) | 评论:0

VB应用程序中实现“查找和替换”功能(2005-09-25 08:14:00)

摘要:VB应用程序中实现“查找和替换”功能
                  作者:unknown 更新时间: 2005-05-03  
                  
                        下载本文源代码                         一、前言                            尽管Visual
                        Basic并不是我最喜欢的开发工具,但我喜欢它简单而又丰富的库集。每当开发一个需要处理大量文本数据的应用程序时,需要具有拼写错误纠正功能,例如,微软的Word程序,当运行"拼写检查"时,将提供给你一个改正错误的机会(尽管是建议),它同时也提供了"查找替换"工......

阅读全文(1573) | 评论:0