预览模式: 普通 | 列表

RADASM中包含宏文件出错的解决办法

这几天按老罗翻译的KMD教程在一步一步地做,想学学驱动开发.

代码原样复制到RADASM的新建工程里面,改了Include路径后,提示无法打开宏文件(*.MAC)

我的MASM安装目录是D:\Program Files\RadASM\masm32,按以下语法,无法包含:

查看更多...

分类:编程 | 评论: 0 | 引用: 0 | 查看次数: 1086
在程序里需要拖动一个分割条来进行界面布局调整时,用得上这代码.

以前也写过,不过没记录下来.

为了以后要用时不至于临时去写,就记录一下:(我懒呀....)

查看更多...

分类:编程 | 评论: 2 | 引用: 0 | 查看次数: 1638
今天QQ上一好友发来个问题,说是工程"发现二义性的名称".

我想,这个好解决啊,不就是重名么.叫他搜索一下,未果,说只有那一处.

按理说不可能的.于是就传了工程过来瞧瞧.

一编译,还真是这样,说是"发现二义性的名称",但是,我在整个工程范围都搜索过了,绝对没有同名的函数与过程...

哎,这还真有意思了!

难道是VB6的一个BUG??   (测试工程见文后A工程)

这可真要弄清楚!

工程是一个ActiveX DLL,添加了十三个类模块.

出现提示的那些函数分别处于三个类模块中,于是就把其它类模块都移除出工程,开始研究.

发现只要把这三个类设置为私有,就不会有此问题;(此时需要有一个公有类,ActiveX DLL必须至少要有一个)

但到底是什么原因呢?

找来找去,的确没有重复的名称!

真晕了,我真的遇到一个BUG了?

接下来怎么办?

我就不断地编译,只要有提示哪个过程有二义性,我就注释它;

如此反复,直到每个类模块只有一个公有过程时,编译通过了.

有意思.

然后再将所有注释还原,编译,咦~~~通过了?!

真怪!!

想了想,问题应该是出在类模块文件里面.

用UE打开,再把原有问题的一个类也打开,使用UE的文本比较,一下子就发现了问题所在.看下面是两段过程的源代码:

'不正常的类
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "cTestA"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Option Explicit

Public Function TestFunction1() As Long
Attribute TestFunction1.VB_UserMemId = 32767
    TestFunction1 = 1
End Function

Public Function TestFunction2() As Long
Attribute TestFunction2.VB_UserMemId = 32767
    TestFunction2 = 1
End Function


'正常的类
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "cTestB"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Option Explicit

Public Function TestFunction1() As Long
    TestFunction1 = 1
End Function

Public Function TestFunction2() As Long
    TestFunction2 = 1
End Function


可见,说二义性名称的类模块里面,多了"Attribute TestFunction2.VB_UserMemId = 32767"一行.

看名字,应该是过程属性,于是就到IDE里看了一下,的确,工具---过程属性---高级里面可以设置.

但这不可能会有两个过程有同样属性的.

于是问QQ上,编写此代码时做了些什么操作?

他想了想,说用到了一个名为"Smart indent"的插件,把代码整理了一下而已,其它都只是复制粘贴,自己没操作过工具菜单里的东西.

原来是这样.

看来这插件可能有误伤,搞得函数的属性值在文件源码级相同了.

为了验证,就需要重现此问题.

便写了两个测试工程,在这里下载:

                                                              下载文件 点击下载此文件

工程A是无法通过编译的,问题如上所说.

工程B正常,用于对比.

至此,问题根源算是搞清楚了.

不过这VB6IDE也太不负责了.属性冲突就说出来呗.干嘛要说二义性名称!!

记得以前测试API方式调用一个DLL,由于DLL内部错误,造成载入失败,VB6IDE也报个"未找到文件",晕!!

看来以后要小心了,VB6IDE报的错误也许并不是像它的意思那样.

要是遇到这种莫名其妙的,无法在代码里找到的错误,那可能就要好好考虑一下了.

查看更多...

分类:编程 | 评论: 3 | 引用: 0 | 查看次数: 3541
之前学到ActiveX EXE实现单元模型线程的招,现在就用上啦....嘿嘿.

这个代码现在可以实现的功能:

添加/删除任务;

查看更多...

分类:编程 | 评论: 17 | 引用: 0 | 查看次数: 8118
有时候程序里面需要对指定文件只运行一次的功能.

对于可执行文件等已知文件的处理是相当简单的,比如EXE文件,直接Shell后返回的就是PID,就可以控制了.

但是对于非可执行文件呢?比如xx.txt,如何知道已经有进程打开它了?

查看更多...

分类:编程 | 评论: 1 | 引用: 0 | 查看次数: 1358

如何在VB6里面实现稳定的多线程

微软官方给出的方案在MSDN里面有说,就是使用ActiveX EXE那种"单元线程模型".

我也曾经试过,的确可以实现"多线程",只是由于要多一个EXE,比较麻烦,后来就没有深入了.

结果一次无意中在VBGOOD中看到一段代码,才打通了一个关节:为什么不直接使用ActiveX EXE写程序呢?!

查看更多...

分类:编程 | 评论: 24 | 引用: 0 | 查看次数: 9271

简单控制音量大小及静音的方法

我是神舟本本,用FN+F3就是静音,FN+F5/F6就是音量增加/减少.

突然觉得是不是可以用程序实现呀.

因为发现按下的时候并不是像LCD亮度一样由硬件在响应,而是系统在响应.

于是就随便生成了一个EXE并用SPY++看了一下消息,嘿,还真是这样.

整理了一下,代码如下:

查看更多...

分类:编程 | 评论: 3 | 引用: 0 | 查看次数: 1708
使用QueryPerformanceFrequency和QueryPerformanceCounter实现.

有人把它拿来做炸弹不?

很精确的哦~~~~

代码没有认真处理,所以要是真的要拿去使用,自己还是仔细检查一下吧

查看更多...

分类:编程 | 评论: 6 | 引用: 0 | 查看次数: 3404
看起来应该是差不多了.

可以放架子上了....

又作了一点小改动,等现在的一些功能处理好了后再一起放2.2里面去吧....

查看更多...

分类:编程 | 评论: 0 | 引用: 0 | 查看次数: 1220

VB函数添加大师2.1超级测试版OK鸟~~~

总算弄得差不多了.

先给下载地址:                             点击下载

2.0是刚写出来的,问题的确是蛮多~~~

查看更多...

分类:编程 | 评论: 0 | 引用: 0 | 查看次数: 1041

VB函数添加大师2.0版快写完了....

其实真正开始写,是昨天下午,嘿嘿

之前的1.95版放在网上,一直没什么下载量,于是也没有动力想去写了.

这两天有位朋友发了N封MAIL,向我提出了1.95版的不足,以及他不满意的地方,希望我能改进.

查看更多...

分类:编程 | 评论: 1 | 引用: 0 | 查看次数: 1083
这个游戏玩起来比较有感觉,尤其是在马上战斗的感觉,简直像真的一样,战场的真实性也不错,很好~~

不过游戏要收费~~好在游戏的安装包里面带了破解补丁,运行它就可以了.

可是这破解补丁看来并不完善,因为是由两个EXE组成.

查看更多...

分类:编程 | 评论: 2 | 引用: 0 | 查看次数: 5395