|
|
由于VB6的部分语句属于解释型的代码,在实际执行的时候效率很难控制,我们常常用VC6来弥补其不足,VB6和VC6混编有2种方式,一种用DLL约定调用,一种基于组件COM技术的调用,后者在VC6中实现比较复杂,而且小型工程几乎没有什么混编优势,我们将在以后的讨论中来学习它,这里先说说基于DLL约定的调用混编
我们基本上都已经学会调用API函数来实现某些功能,比如BitBlt,使用API函数首先要声明
Public Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
这个声明语句有3个部分,一个是DLL名称gdi32,这个是导出名,系统会自动去System32等系统目录,环境变量目录和当前目录下去搜寻这个DLL,我们也可以直接指定dll的路径来取代导出名,比如:
Public Declare Function BitBlt Lib "C:\WINDOWS\System32\gdi32.dll" Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
第二部分是函数名BitBlt还可以用Alias来指定别名,这是为了和早期16位系统函数兼容,因为有的16位函数名是不一样的。暂不去理会。
第三部分是参数,参数有传值ByVal和传地址ByRef两种,我们在使用的时候,必须搞清楚参数传递的方式,另外一个很重要也很难说清楚的就是参数类型的匹配,我们通常在VC6中定义的int在VB6中要对应于Long类型,VB6中的String在DLL约定中VC6里对应的是LPCSTR(要注意,这一点和组件COM中BSTR的对应方式不一样),我们可以在实践中慢慢体会,多调试就可以了。
说完了DLL在VB6中的调用,现在我们开始说说如何在VC6中编写自己的DLL,大家只要对C语言有点了解,对VC6编译器稍微熟悉就可以开始了,不是很难 |
|