vb 调用vc写的dll时,怎样传递数组参数

wangyongshuang 2002-05-24 07:45:22
用vc写了一个dll,
double CParserApp::Calculate(CArray <double ,double> Value,CArray <CString ,CString&> ValueName,CString str)
vb 中调用时
declare Function Calculate(Value as double,ValueName as double,str as string)
引用时写

dim Value(10) as double
dim ValueName(10) as string
dim str as string
dim a as double
dim i as integer
for i=1 to 10
Value(i)=i
ValueName(i)="i" & CStr(i)
next i
str="abcd"
a=Calculate(Value,ValueName,str)

问题是数据传不过去
如果是byval 可以,,但vb中函数定义我就不知道怎么写
...全文
143 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangyongshuang 2002-05-30
  • 打赏
  • 举报
回复
怎么用BSTR
wangyongshuang 2002-05-30
  • 打赏
  • 举报
回复
up
BillChang 2002-05-30
  • 打赏
  • 举报
回复
观注中
wangyongshuang 2002-05-30
  • 打赏
  • 举报
回复
double 可以解决字符串还没解决有好办法吗,
zyl910 2002-05-30
  • 打赏
  • 举报
回复
先把数组中的字符串转为ANSI
再建立一个Long数组,把它的每一个元素设为StrPtr(字符串数组的元素)
把那个Long数组传过去就行了
冰霜icefrost 2002-05-30
  • 打赏
  • 举报
回复
Function GetCharByte(ByVal OneChar As Integer, ByVal IsHighByte As Boolean) As Byte ' 该函数获得一个字符的高字节或低字节
If IsHighByte Then
If OneChar >= 0 Then
GetCharByte = CByte(OneChar \ 256)
'右移8位,得到高字节
Else
GetCharByte = CByte((OneChar
And &H7FFF) \ 256) Or &H80
End If
Exit Function
Else
GetCharByte = CByte(OneChar And &HFF)
'屏蔽掉高字节,得到低字节
Exit Function
End If
End Function

Sub StrToByte(StrToChange As String, ByteArray() As Byte)
'该函数将一个字符串转换成字节数组
Dim LowBound, UpBound As Integer
Dim i, count, length As Integer
Dim OneChar As Integer

count = 0
length = Len(StrToChange)
LowBound = LBound(ByteArray)
UpBound = UBound(ByteArray)

For i = LowBound To UpBound
ByteArray(i) = 0 '初始化字节数组
Next

For i = LowBound To UpBound
count = count + 1
If count <= length Then
OneChar = Asc(Mid(StrToChange, count, 1))

If (OneChar > 255) Or (OneChar < 0) Then
'该字符是非ASCII字符
ByteArray(i) = GetCharByte(OneChar, True) '得到高字节
i = i + 1
If i <= UpBound Then ByteArray(i)
= GetCharByte(OneChar, False)
'得到低字节
Else
'该字符是ASCII字符
ByteArray(i) = OneChar
End If
Else
Exit For
End If
Next
End Sub

Sub ChangeStrAryToByte(StrAry()
As String, ByteAry() As Byte)
'将字符串数组转换成字节数组
Dim LowBound, UpBound As Integer
Dim i, count, StartPos, MaxLen As Integer
Dim TmpByte() As Byte

LowBound = LBound(StrAry)
UpBound = UBound(StrAry)
count = 0
ReDim ByteAry(0)

For i = LowBound To UpBound
MaxLen = LenB(StrAry(i))
ReDim TmpByte(MaxLen + 1)
ReDim Preserve ByteAry(count + MaxLen + 1)
Call StrToByte(StrAry(i), TmpByte) '转换一个字符串
StartPos = count
Do
ByteAry(count) = TmpByte(count - StartPos)
count = count + 1
If ByteAry(count - 1) = 0 Then Exit Do
Loop '将每一个字符串对应
的字节数组按顺序填入结果数组中
ReDim Preserve ByteAry(count - 1)
Next i
End Sub



  下面看一个转换的例子:

DimResultAry()asByte
DimSomeStr(2)asString
SomeStr(0)="测试1"
SomeStr(1)="测试222"
SomeStr(2)="测试33"
CallChangeStrAryToByte
(SomeStr,ResultAry)'转换字符串数组
sproll 2002-05-25
  • 打赏
  • 举报
回复
向DLL模块传递数组一般用byref,而且使用的参数为该数组的第一个参数。

dim intTest(0 to 9) as Integer
FunctionTest(intTest(0))
这样的声明不正确吧,
declare Function Calculate(Value as double,ValueName as double,str as string)
CString str是一个MFC中的字符串类型的变量,str as string是一个BSTR类型的变量。

herony 2002-05-25
  • 打赏
  • 举报
回复
vb和c++没什么区别。数组的传递是引用传递,传递的是数组的首地址,
这个和指针很类似,用byref传递,并且要声明数组,楼上的兄弟说得
没错
wangyongshuang 2002-05-25
  • 打赏
  • 举报
回复
谢谢sprolll,我再试试
wangyongshuang 2002-05-24
  • 打赏
  • 举报
回复
我把问题写得已经很具体了,请高手指点一二,
小弟感激涕零,毕业设计就快没时间了,
Help

7,765

社区成员

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

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