用VB编写的DLL返回String类型仅返回首字母

suliang1984 2007-12-17 10:53:34
dll文件内容如下:

Function DLLMain(ByVal a As Long, ByVal B As Long, ByVal c As Long) As Long
DLLMain = 1
End Function

Sub Main()

End Sub

Function HardDiskSerialNo() As Byte

HardDiskSerialNo = "ABCDEF"

End Function

在另外一个工程内调用该DLL,代码如下:
Private Declare Function HardDiskSerialNo Lib "testDLL.DLL" () As Byte
Private Sub Command1_Click()

Text1.Text = HardDiskSerialNo()

End Sub

执行程序后Text1.Text中仅显示字母A。
我的DLL是用网上的插件编译成有输出值的类型。
...全文
58 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
注意看我发的函数体及其编译后的声明...........
回复
东方之珠 2007-12-18
Byte 换成String即可

回复
Tiger_Zhao 2007-12-18
调用处的函数返回值也要声明为String。
回复
suliang1984 2007-12-18
Sorry, 是我粘贴错了,呵呵,源代码是
Function HardDiskSerialNo() As String

HardDiskSerialNo = "ABCDEF"

End Function

因为想用byte型试试,但发帖的时候没改过来。
回复
zzyong00 2007-12-18
你看看你DLL里的定义:
Function HardDiskSerialNo() As Byte

HardDiskSerialNo = "ABCDEF"

End Function
是byte类型,当然,只返回一个字符了!!
-----------------
输入参数怎么变成输出参数了??
---------
有什么不可以吗?很多API都是这样。如果你希望一个函数返回多个不同类型的值,你怎么办?
回复
suliang1984 2007-12-18
顶楼的代码是我粘错了!!源代码确实是String型
回复
suliang1984 2007-12-17
这个写法好奇怪,输入参数怎么变成输出参数了??在程序里怎么应用这个函数??
我是在网上down的一个小插件,如果有需要的话给我站内消息你的Email,我发给你!!
回复
你只返回了一个字符呀.....汗.

用这个做测试:

Function HardDiskSerialNo(byref outStr as string) As long
dim tmpStr as string

tmpstr="ABCDEF"
outstr=tmpstr
HardDiskSerialNo = len(tmpstr)

End Function

Private Declare Function HardDiskSerialNo Lib "testDLL.DLL" (byval outStr as string) As Long

按标准API的做法吧.

注意声明.

同时先分配缓冲区.

PS:你用的什么插件...?
回复
发动态
发帖子
VB基础类
创建于2007-09-28

7451

社区成员

VB 基础类
申请成为版主
社区公告
暂无公告