char * BYTE * 作参数,在VB中怎么声明
char * BYTE * 作参数,在VB中怎么声明呢?在网上有许多人问到这个问题,自己经过实践也总结了一下
用VC++作个DLL,里面有一个导出函数
long readcard(char *p)
{ char *m="I Love you!";
strcpy(p,m);
return 0;
}
定义了一个def文件
LIBRARY "ucard"
EXPORTS readcard @1
编译生成ucard.dll,然后直接拉到system32目录下,然后开始在VB中声明,这里有两个方法
1,Private Declare Function readcard Lib "ucard" (ByVal s As String) As Long
然后在command1写下简单的代码
Dim strName As String * 15
Call readcard(strName)
Print strName
程序正确输出:I Love you! ,需要注意的两个地方第一声明的时候用的ByVal 不是ByRef,第二用的是
Dim strName As String * 15 形式的声明,这样一开始就分配的空间,我想如果像这样的声明
Dim strName As String 是一开始没有分配空间的. 当然也可以这样写
Dim strName As String
strName=Space(15)
Call readcard(strName)
Print strName
或者直接赋个随便的值
Dim strName As String
strName="jisfdsfdksfdsfh"
Call readcard(strName)
Print strName
这样都会将I Love you 拷贝到strName中去。
2,可以这样声明
1,Private Declare Function readcard Lib "ucard" (ByRef s As byte)As Long
然后在Command1下写下代码.
Dim strName(15) As Byte
Call readcard(strName(0))
Dim i As Integer
Dim tmpName As String
For i = 0 To 15
tmpName = tmpName & Chr(strName(i))
Next i
Print tmpName
这样也可以得到其值.
在用VC++作DLL的时候开始代码是这样写的
long readcard(char *p)
{ p="I Love you!";
return 0;
}
这样想当然地认为改变了P所指向内存中的内容,调了许久才发现想法是错的
p="I Love you!";这样赋值并没有把P的指向内存中的内容改变,反而是把P的指向改变了,"I Love you!"
是一个常量也存于内存中,这样反而是把I Love you所存的地址赋给了p,是把p的指向改变了,而P指向
的内容并没有变.