char * BYTE * 作参数,在VB中怎么声明

char * BYTE * 作参数,在VB中怎么声明

编码文章call10242025-07-14 12:27:376A+A-

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指向

的内容并没有变.

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4