系统消息 发表于 2021-7-3 17:24:47

【DirectX】【VB】牛年马月神作—高仿微软dx8vb.dll重制版开源

本帖最后由 系统消息 于 2021-7-5 14:12 编辑

原帖来源:【DirectX】【VB】牛年马月神作——高仿微软dx8vb.dll重制版(优化、BUG修复、开源)https://www.0xaa55.com/thread-26515-1-1.html(出处: 技术宅的结界,转载请保留出处。)
百度分贴:【DirectX】牛年马月神作——高仿微软dx8vb.dll重制版开源了 https://tieba.baidu.com/p/7433369521
技术交流QQ群(有技术问题或发现新的BUG均可来反馈):
      112915633      CoolWind游戏编程研究
      79221561      VB游戏(GDI OpenGL DirectX)
      264417277      0xAA55技术宅的结界

用VB写过DirectX程序的开发者基本上都知道微软开发过VB专用版的DX类库 dx7vb.dll 和 dx8vb.dll,这俩dll至今已有二十来年的历史了,这些年间有不少VB开发者用其开发出了优秀作品,但是绝大多数开发者都只使用了DX的图形图像功能,经过我本人的研究发现dx8vb.dll里面相对用的较少的功能有重大BUG,可是这么多年过去了发现的人少之又少,而微软官方又从来没有修复这些BUG,于是我决定自行修复。我们再来看看,从Vista后系统也不再内置这两个dll了,要用的话需要发布时打包,既然要打包那干嘛不打包个已修复过BUG的版本呢?
说到dx8vb.dll有BUG,那么它有哪些BUG呢?对我们开发者有什么影响?我为什么要修复这些BUG呢?请看以下列表:

模块/方法描述等级
DirectSound3DBuffer内部对象泄漏:释放外部后对象后,此对象析构函数里面未完整释放内部对象,会导致对象释放后声音还在继续播放(回到IDE状态也是如此),即便先手动停止了播放后再释放也会导致内存泄漏(注意并不仅仅是对象本身泄漏,连音频Buffer也一起泄漏了)。严重:会有声音残留和大量内存无法释放。
DirectPlayAddress、DirectPlayClient、DirectPlayLobbiedApplication、DirectPlayLobbyClient、DirectPlayPeer、DirectPlayServer、DirectPlayVoiceClient、DirectPlayVoiceServer和 DirectSound3DBuffer 的类似,只不过此对象没有声音,对开发者的体验影响相对较小,但是也存在内存泄漏和网络连接不能自动断开等问题。普通:平常感觉不到,但可能长时间运行会有内存持续增长等问题。
InternalGetObject、InternalSetObject这是获取内部对象的接口dx8vb.dll是对VC的DX接口二次封装方便VB使用,因此该函数可用和原生DXAPI交互使用,但是微软忘记了对其内部对象的计数引用处理,使用此函数存在导致IDE崩溃的风险。严重:IDE崩溃将会导致未保存的代码丢失。
D3DX8.DrawText这个函数其实并不算BUG,而是它内部调用的是ANSI接口,因此会有一些特殊字符变成问号的问题,所以我将其修改成了Unicode接口,顺便再额外优化了一下它在透明背景的RTT中绘制的效果。轻微:不修复不影响正常使用,但修复了会有更好的体验。



根据Ayala大佬的提议,现发布一下BUG修复前后的对比图(左边为修复前,右边为修复后):


可以看到:3D音效BUG修复前在回到IDE后,仍然有声音在播放,而修复后就释放掉了。而DrawText在修复前Unicode特殊字符就变成?,还有就是会因为\0字符截断,修复后就可以正确显示特殊字符和\0字符,甚至由两个UTF16组成的Emoji字符(前提是你要有对应的字体)。

本次发布的dx8vb.dll重置版,基于DirectX8.1开发,需要注意的是微软官方的dx8vb.dll有8.0和8.1两个版本,并且这两个版本有一部分接口互不兼容。本人目前是重置的8.1版本,并与微软官方的8.1版本完全相互兼容,原8.0的开发者如需使用,可能需要修改部分代码后重新编译后才能使用。因为不同版本的dx8vb.dll之间存在的不兼容问题,我提供了绿化清单文件(使用方法和XP控件主题的manifest一样),这样可以让exe不走注册表调用此dll(IDE下使用仍需注册),避免与别人电脑上已安装的版本冲突问题。

免责声明:本重置版及其源码都仅用于个人性质的学习参考和技术研究,从未有意标榜或冒充是微软官方产品。如有商用行为或造成版权纠纷等侵犯微软公司合法版权的行为,一切后果将由肇事者自行负责。

提示:源码需回帖可见(源码的解压缩密码在二进制文件压缩包的help.txt里)**** Hidden Message *****

刚刚好Jackson 发表于 2021-11-25 18:39:13

新人来报道了。看QQ群的讨论,过来学习下,楼主辛苦了!所有VB6爱好者的福音啊

Ayala 发表于 2021-7-3 23:38:24

发布一下bug版本的演示图和修复版本的演示图,效果会更好哟

秋枫萧萧 发表于 2021-7-3 17:40:48

前排支持YY菌魔改DX!
原来DX8的DrawText竟然是默认A版?!
那这个DLL是不是有机会修复一些国外DX8游戏的乱码问题?

系统消息 发表于 2021-7-3 18:02:17

秋枫萧萧 发表于 2021-7-3 17:40
前排支持YY菌魔改DX!
原来DX8的DrawText竟然是默认A版?!
那这个DLL是不是有机会修复一些国外DX8游戏的乱 ...

也许能吧,主要还是看是什么原因导致的,如果只是游戏本身的原因,跟dx8vb.dll无关的话,理论上就不会修复。

PASSOK 发表于 2021-7-3 18:06:38

VBer们的福音,我肯定不会研究它的源码的,望楼主继续维护之。
阿里阿多 :kiss:

quark 发表于 2021-7-3 18:12:09

厉害啊。。。膜拜大神。。。

xxdoc 发表于 2021-7-4 08:52:45

厉害了.

myis0x 发表于 2021-7-4 09:11:13

支持YY菌魔改DX!
原来DX8的DrawText竟然是默认A版

系统消息 发表于 2021-7-5 14:15:46

Ayala 发表于 2021-7-3 23:38
发布一下bug版本的演示图和修复版本的演示图,效果会更好哟

已经按照你说的来发布了两个可以明显的看出区别的BUG对比图来看了{:4_90:}

Golden Blonde 发表于 2021-7-6 04:57:13

LZ能否用DX来制作一个山寨CS甚至山寨GTA(凭个人之力)?

系统消息 发表于 2021-7-6 10:00:17

美俪女神 发表于 2021-7-6 04:57
LZ能否用DX来制作一个山寨CS甚至山寨GTA(凭个人之力)?

不能,我DX主要是在搞的2D方面,3D方面不熟,最多只了解一点点基本原理。

搬砖工 发表于 2021-7-6 11:02:00

回复就回复,反正也是回复

Golden Blonde 发表于 2021-7-7 00:22:22

系统消息 发表于 2021-7-6 10:00
不能,我DX主要是在搞的2D方面,3D方面不熟,最多只了解一点点基本原理。 ...

A5群里除了A5,还有没有谁懂得搞3D的?我在2014年就跟A5提过山寨CS/山寨GTA,现在我儿子都会打酱油了,山寨CS/山寨GTA还是没影。

系统消息 发表于 2021-7-7 10:13:56

美俪女神 发表于 2021-7-7 00:22
A5群里除了A5,还有没有谁懂得搞3D的?我在2014年就跟A5提过山寨CS/山寨GTA,现在我儿子都会打酱油了,山 ...

A5群里懂3D的大佬大有人在吧,只是除了A5其他人基本上都很少在群里发言。

天马座 发表于 2021-8-19 09:53:04

膜拜大佬

鱼头之王 发表于 2021-9-11 17:54:32

膜拜大佬

xiongsx 发表于 2021-11-12 21:12:25

vb 好想看一下内容

完玩 发表于 2021-11-24 09:13:41

来看看用什么方式优化修复BUG的

Ink_Hin_fifteen 发表于 2021-12-3 08:46:11

呜呼 来赞一个!!!
页: [1] 2
查看完整版本: 【DirectX】【VB】牛年马月神作—高仿微软dx8vb.dll重制版开源