用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是用网上的插件编译成有输出值的类型。
...全文
97 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗷嗷叫的老马 2007-12-19
  • 打赏
  • 举报
回复
注意看我发的函数体及其编译后的声明...........
东方之珠 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,我发给你!!
嗷嗷叫的老马 2007-12-17
  • 打赏
  • 举报
回复
你只返回了一个字符呀.....汗.

用这个做测试:

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:你用的什么插件...?

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧