【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 ***** 新人来报道了。看QQ群的讨论,过来学习下,楼主辛苦了!所有VB6爱好者的福音啊 发布一下bug版本的演示图和修复版本的演示图,效果会更好哟 前排支持YY菌魔改DX!
原来DX8的DrawText竟然是默认A版?!
那这个DLL是不是有机会修复一些国外DX8游戏的乱码问题? 秋枫萧萧 发表于 2021-7-3 17:40
前排支持YY菌魔改DX!
原来DX8的DrawText竟然是默认A版?!
那这个DLL是不是有机会修复一些国外DX8游戏的乱 ...
也许能吧,主要还是看是什么原因导致的,如果只是游戏本身的原因,跟dx8vb.dll无关的话,理论上就不会修复。 VBer们的福音,我肯定不会研究它的源码的,望楼主继续维护之。
阿里阿多 :kiss: 厉害啊。。。膜拜大神。。。 厉害了. 支持YY菌魔改DX!
原来DX8的DrawText竟然是默认A版 Ayala 发表于 2021-7-3 23:38
发布一下bug版本的演示图和修复版本的演示图,效果会更好哟
已经按照你说的来发布了两个可以明显的看出区别的BUG对比图来看了{:4_90:} LZ能否用DX来制作一个山寨CS甚至山寨GTA(凭个人之力)? 美俪女神 发表于 2021-7-6 04:57
LZ能否用DX来制作一个山寨CS甚至山寨GTA(凭个人之力)?
不能,我DX主要是在搞的2D方面,3D方面不熟,最多只了解一点点基本原理。 回复就回复,反正也是回复 系统消息 发表于 2021-7-6 10:00
不能,我DX主要是在搞的2D方面,3D方面不熟,最多只了解一点点基本原理。 ...
A5群里除了A5,还有没有谁懂得搞3D的?我在2014年就跟A5提过山寨CS/山寨GTA,现在我儿子都会打酱油了,山寨CS/山寨GTA还是没影。 美俪女神 发表于 2021-7-7 00:22
A5群里除了A5,还有没有谁懂得搞3D的?我在2014年就跟A5提过山寨CS/山寨GTA,现在我儿子都会打酱油了,山 ...
A5群里懂3D的大佬大有人在吧,只是除了A5其他人基本上都很少在群里发言。 膜拜大佬 膜拜大佬 vb 好想看一下内容 来看看用什么方式优化修复BUG的 呜呼 来赞一个!!!
页:
[1]
2