VB调用C++的DLL函数,参数是自定义结构体数组,这个参数是要输出的
Private Declare Function FunctionA Lib "A.DLL" (ByVal objptr As Long, ByRef B As STRUCTA) As IntegerPrivate Type STRUCTA
ID(1 To 5) As Long
Num(1 To 6) As Long
End Type我在VB里调用:
Dim INFO() As STRUCTA
str = FunctionA (longa, INFO)这样语法会报错,说INFO和申明的类型不同
可是ByRef B As STRUCTA-〉ByVal B As STRUCTA又不可以,自定义只能ByRef 哪位高手帮我看看,如何改阿
谢谢!
Private Declare Function FunctionA Lib "A.DLL" (ByVal objptr As Long, ByRef B As STRUCTA) As IntegerPrivate Type STRUCTA
ID(1 To 5) As Long
Num(1 To 6) As Long
End Type我在VB里调用:
Dim INFO() As STRUCTA
str = FunctionA (longa, INFO)这样语法会报错,说INFO和申明的类型不同
可是ByRef B As STRUCTA-〉ByVal B As STRUCTA又不可以,自定义只能ByRef 哪位高手帮我看看,如何改阿
谢谢!
ByRef B As STRUCTA改成ByRef B As Any
Variant是改哪里啊
Redim INFO(3) '需要分配内存'
str = FunctionA (longa, INFO(0)) '传入数组第一个成员的地址'
调用dll后,只对INFO(0)的数保留了,INFO(1)的在vb中还是没有被赋值
否则 VB 中你就需逐个将数组成员作为参数进行函数调用。
一样的结果我的c++的函数是这样的FunctionA (long longa,
STRUCTA * s)
{
s(0).Nam(1) = "123"
s(1).Nam(1) = "456"}然后vb调用后,s(0)是"123",可是s(1).Nam(1) 还是空的
还有 C 中的 STRUCTA 怎样定义的,明显与 VB 声明不符。
打错了
FunctionA (long longa,
STRUCTA * s)
{
s[1].Num(1) = 123
s[1].Num(1) = 456}
都对的
因该是vba里哪里错了
传地址或dll导入的地方
大家帮我想想
方括号!
下标!
是不是要用一下vb技术阿
Dim pOutputArray As Long
outputArray() As Byte
ReDim outputArray(100) As Byte
pOutputArray = VarPtr(outputArray(0)) FunctionA (longa, pOutputArray ) CopyMemory ByVal pOutputArray, ByVal pData, UBound(outputArray)可是pData是什么啊,在我代码里是什么啊
只是只保存了数组第1个的值
lsd发现我c里有问题吗请指点
有人可以告诉我的程序里如何正确使用这个吗
谢谢
---声明中的B 是一个单个STRUCTA变量,
Dim INFO() As STRUCTA
str = FunctionA (longa, INFO) ------调用时INFO是一个STRUCTA 数组,INFO和申明的类型不同是理所当然的 .
{
long ID[5];
long NumID[6];
}
DLL_EXPORT int __stdcall FunctionA(long a, STRUCTA IDInfo[])
{
IDInfo[0].ID[0] = 2;
IDInfo[1].ID[0] = 3;
}
可是我vb里,现在是
Private Declare Function FunctionA Lib "A.DLL" (ByVal objptr As Long, ByVal B As long) As IntegerDim INFO() As STRUCTA
Dim pOutputArray As Long
ReDim INFO(4) As STRUCTA
pOutputArray = VarPtr(INFO(0))
str = FunctionA (longa, pOutputArray ) vb里有错吗,可是报了个内存不足的错误Tiger_Zhao:vb则么改阿
现在只有数组1里有值,后面都没有被覆值
我给c的就是1个结构体的大小,所以c对数组2,3赋值后,传给vb,vb没有接受到亚
所以我想用CopyMemory试试有谁可以把我vb代码改称CopyMemory吗
可是用不来,感觉因该用这个
谁可以把我代码改造下阿
你提这种和代码有关的问题,应该把相关的代码都贴出来!2. 回答问题的瞎忙乎
楼主的代码没有贴出来,大家回答都是瞎忙。3. VB的ByRef参数就是传递变量的指针,所以想传递数组只要传递数组第一个元素就可以。这些问题在MSDN都可以找到答案。3楼的说的对。4. C里面,数组long ID[5]含六个元素ID[0]...ID[5];VB里面,数组ID(1 To 5) As Long 含5个元素。