0xAA55 发表于 2020-6-3 14:02:47

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

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功能了。



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



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

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



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



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



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



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



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



工具链下载:


glew32vb.dll和glew32vb.tlb的下载:(有时候VB6 IDE会拒绝直接从DLL里读出tlb,此时如果有单独的tlb的话就可以了)

watermelon 发表于 2020-6-6 23:13:31

vb6可以说相当讲究了,第一个帖子里面的图片相当好看。

Golden Blonde 发表于 2020-6-9 16:44:43

好熟悉的XP界面,一眨眼20年了。

大宝 发表于 2020-7-7 15:59:42

本帖最后由 china_shy_wzb 于 2020-7-9 17:22 编辑

能给一次机会吗

大宝 发表于 2020-7-9 15:07:18

你也太狠了吧,一下子给我整成负的了

大宝 发表于 2020-7-9 15:11:40

china_shy_wzb 发表于 2020-7-7 15:59
GLEW 2.1的VB6专用dll和tlb的制作过程

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

0xAA55 发表于 2020-7-9 23:37:49

china_shy_wzb 发表于 2020-7-9 15:11
能不能还我一些,高抬贵手

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

大宝 发表于 2020-7-20 13:21:39

好的,谢谢你了

大宝 发表于 2020-7-20 14:12:11

都改完了,你看看可以了吗

大宝 发表于 2020-7-20 14:13:16

0xAA55 发表于 2020-7-9 23:37
你把所有的那些帖子都修改了,我就撤销扣分。

都改完了,你看看可以了吗,谢谢了

0xAA55 发表于 2020-7-22 06:40:00

china_shy_wzb 发表于 2020-7-20 14:13
都改完了,你看看可以了吗,谢谢了

我检查了,还有很多没改

大宝 发表于 2020-7-22 17:00:02

0xAA55 发表于 2020-7-22 06:40
我检查了,还有很多没改

我确实挨个改的,肯定不一样了,都是我写的了

0xAA55 发表于 2020-7-22 21:57:48

china_shy_wzb 发表于 2020-7-22 17:00
我确实挨个改的,肯定不一样了,都是我写的了

依然没有全改,管理员看得到你的所有回帖和修改的操作。

但,可以看到你的诚意。暂且归还积分。

大宝 发表于 2020-7-23 10:07:29

0xAA55 发表于 2020-7-22 21:57
依然没有全改,管理员看得到你的所有回帖和修改的操作。

但,可以看到你的诚意。暂且归还积分。 ...

非常谢谢你,以后不会了,我也多为咱们网站做贡献

/u12456 发表于 2020-10-9 09:58:23

支持感谢。

imr2013 发表于 2022-11-23 23:00:16

感谢楼主更新!

gujin163 发表于 2024-2-7 16:27:45

啥也不说了,帖子就是带劲!
页: [1]
查看完整版本: 【VB6】glew32的2.1的VB6版本的dll和tlb(含编译工具链)