技术宅的结界

 找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 150|回复: 6
收起左侧

【VB6】glew32的2.1的VB6版本的dll和tlb(含编译工具链)

[复制链接]

1060

主题

2443

帖子

6万

积分

用户组: 管理员

一只技术宅

UID
1
精华
221
威望
348 点
宅币
19518 个
贡献
40308 次
宅之契约
0 份
在线时间
1846 小时
注册时间
2014-1-26
发表于 2020-6-3 14:02:47 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有帐号?立即注册→加入我们

x
glew32的2.0版本的制作过程请看我的上一个帖子

现在这个是GLEW 2.1的VB6专用dll和tlb的制作过程。其实GLEW 2.1距今(2020年)已经有3年了,新出的RTX显卡的光追扩展并没有出现在glew上,所以还需要调用者自己再专门去wglGetProcAddress取函数指针。

不过对于现有的部分,GLEW 2.1已经可以被使用VB6来调用了。这一次我借助了自己写的PrintPE用于打印dll的导出表,实现了asm代码部分的生成的自动化。(对比以前,我使用的是编辑器的列编辑功能和带换行符支持的查找替换的功能来实现的批量处理函数符号)

通过使用glew32vb的新版本,你已经可以使用VB6调用大多数能用的OpenGL功能了。

xp.png

只需要双击glew32vbcompilingtool.exe,然后等待一系列的自动化处理过程,最后你就会得到一堆文件。其中的glew32vb.dll和glew32vb.tlb是主要拿来用的文件。glew32vb.dll负责提供VB6能够调用的函数形式(原版glew32.dll只提供了一系列函数指针,这是VB6不能直接调用的)

gen.png

在使用VB6进行OpenGL的开发(尤其是OpenGL 3.x的开发)的时候,最容易出现的坑就是某些API竟然不存在(会让你跳转到0x00000000然后IDE跟着一起崩溃),但你由不好去检测它能不能用。而且GLEW库其实并不完全能检测哪些EXT、ARB的API是能够安全调用的

这个时候,我们其实需要通过让VB6以调用API的方式来获取实际存储于GLEW库里面的函数指针的值,来判断这个函数是不是空的。不过好在因为我能够实现asm代码部分的生成的自动化,我顺手就可以生成一系列的GetProcAddress开头的函数,专门用来供VB6调用以实现函数存在性的检测。

GPA.png

然而为了能够实现这一步,我是写了一些代码的。先获取到glew32.dll的导出表,然后根据导出表里面的符号来生成我们需要的跳转函数等。

glew32vbcomptool.png

生成出来的汇编指令是这个样子的:(使用nasm编译)

VAP.png

这样的话,DLL的指令部分就完成了。接下来是TLB部分,和上次一样,依然借助各种自动化工具(主要是自己写的“vbgldef.exe”)配合MIDL把IDL编译为TLB。这一次我稍微调整了一下vbParseOpenGLDef的代码实现,让它在过第一道typedef解析的时候有能力获得宏的定义,并在遇到使用typedef定义结构体的时候出现字符串数组的长度由宏来定义的场合下,能自动把宏展开为数值。

unroll.png

做了这么多努力,接下来应该是组装DLL了。不过我意识到,如果就这么做了DLL的话,它没得版本信息,鬼知道它是GLEW2.0的封装还是GLEW2.1的封装。所以我又写了资源脚本,用来生成版本信息的资源。

ver.png

因为有资源文件了,而且TLB也有了,那我只需要在资源脚本里加一行代码,就可以把TLB植入到DLL里,不需要拄拐棍儿了。

typelib.png

工具链下载:
glew32vbcompilingtool.zip (2.87 MB, 下载次数: 0, 售价: 10 个宅币)

评分

参与人数 1威望 +10 宅币 +30 贡献 +10 收起 理由
watermelon + 10 + 30 + 10 vb6可以说相当讲究了,第一个帖子里面的图.

查看全部评分

回复

使用道具 举报

24

主题

262

帖子

1505

积分

用户组: 上·技术宅

UID
3808
精华
6
威望
53 点
宅币
1017 个
贡献
90 次
宅之契约
0 份
在线时间
262 小时
注册时间
2018-5-6
发表于 2020-6-6 23:13:31 | 显示全部楼层
vb6可以说相当讲究了,第一个帖子里面的图片相当好看。
菜鸟一枚,直接指正,不必留情

36

主题

161

帖子

7373

积分

用户组: 管理员

UID
77
精华
11
威望
125 点
宅币
6765 个
贡献
142 次
宅之契约
0 份
在线时间
121 小时
注册时间
2014-2-22
发表于 2020-6-9 16:44:43 | 显示全部楼层
好熟悉的XP界面,一眨眼20年了。

1

主题

34

帖子

19

积分

用户组: 初·技术宅

UID
6035
精华
0
威望
2 点
宅币
-19 个
贡献
0 次
宅之契约
0 份
在线时间
5 小时
注册时间
2020-7-7
发表于 2020-7-7 15:59:42 | 显示全部楼层
本帖最后由 china_shy_wzb 于 2020-7-9 17:22 编辑

能给一次机会吗

评分

参与人数 1宅币 -71 收起 理由
0xAA55 -71 请勿使用复制粘贴帖子原文的方法来回帖赚积.

查看全部评分

1

主题

34

帖子

19

积分

用户组: 初·技术宅

UID
6035
精华
0
威望
2 点
宅币
-19 个
贡献
0 次
宅之契约
0 份
在线时间
5 小时
注册时间
2020-7-7
发表于 7 天前 | 显示全部楼层
你也太狠了吧,一下子给我整成负的了

1

主题

34

帖子

19

积分

用户组: 初·技术宅

UID
6035
精华
0
威望
2 点
宅币
-19 个
贡献
0 次
宅之契约
0 份
在线时间
5 小时
注册时间
2020-7-7
发表于 7 天前 | 显示全部楼层
china_shy_wzb 发表于 2020-7-7 15:59
GLEW 2.1的VB6专用dll和tlb的制作过程

能不能还我一些,高抬贵手

1060

主题

2443

帖子

6万

积分

用户组: 管理员

一只技术宅

UID
1
精华
221
威望
348 点
宅币
19518 个
贡献
40308 次
宅之契约
0 份
在线时间
1846 小时
注册时间
2014-1-26
 楼主| 发表于 7 天前 | 显示全部楼层
china_shy_wzb 发表于 2020-7-9 15:11
能不能还我一些,高抬贵手

你把所有的那些帖子都修改了,我就撤销扣分。

本版积分规则

QQ|申请友链||Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图  

GMT+8, 2020-7-16 10:35 , Processed in 0.121746 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表