VB中调用DLL

fengyunking 2003-05-07 02:50:09
我想在VB中调用DLL(不是COM),如何调用?
...全文
25 点赞 收藏 1
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
道素 2003-05-09
语句格式为:Declare Sub 过程名Lib [ Alias " 别名]([ByVal 参数AS类型]),或为Declare Function函数名Lib [Alias " 别名]([ByVal 参数AS类型])AS类型在声明中首先用Declare关键字表示声明DLL中的函数。在C语言中有的函数类型为VOID,它表示不具有返回值,则必须用关键字Sub将其声明成过程。有的函数具有返回值,则必须用关键字Function将其声明成函数,并且在声明语句的最后要用AS关键字指明函数返回值的类型。

主要注意两者数据类型

C语言与VB的数据类型对照表
C语言 VB
LPSTR String
NULL String
Char Byte
Int Long(32位环境下)
句柄 Long

VB调用DLL时注意事项:值传递ByVal与引用传递ByDef
顶点

值传递:
当通过值传递一个参数时,将参数的值的拷贝传递给过程。如果在过程中改变了参数的值,它不会影响原始变量。
引用传递(VB缺省):
当通过引用传递一个参数时,将参数的地址传递给过程。如果在过程中改变了参数的值,原始变量的值也被修改。

在C语言中字符串变量实际上是一个地址。所以在VB中即使声明一个字符串变量值传递,也会把地址传给DLL过程,即:源变量的值会随着DLL过程中的对应参数改变而改变。
在C语言中空字符串用NULL,即0来表示。在VB中则不能把0作为传给一个String类型的参数,需要使用vbNullString常量来表示空字符串。

C DLL 原型 VB声明 VB调用

int a ByVal a as long Call func(…,a,…)
long a ByRef a as long Call func(…,byval a,…)
int *pa ByRef pa as long Call func(…,pa,…)
long *pa ByVal pa as long Call func(…,varptr(pa),…)
char *pstr ByVal pstr as string Call func(…,pstr,…)
wchar *pstr ByRef pstr as string Call func(…,byval pstr,…)
struct tagX *p ByRef p as tagX Call func(…,ptag,…)
HANDLE h ByVal h as long Call func(…,h,…)
回复
相关推荐
发帖
VB基础类
创建于2007-09-28

7522

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2003-05-07 02:50
社区公告
暂无公告