将vba结构发送到C ++ DLL的问题 [英] problem to send a vba structure to a C ++ dll
问题描述
您好,
我想通过DLL转换成C ++结构,这是VB结构(UTD)的内容。
我的VB代码如下:
私有 声明 功能 Cpp_TEST1 Lib C:\ Users \\TEST1.dll( ByRef iStruct As myStruct) As Double
输入myStruct
n As Long
data()作为 长
rData As Boolean
End 类型
iStruct.n = 10
iStruct.rData = True
ReDim iStruct.data( 1 To 12 )
iStruct.data( 1 )= 1
iStruct.data( 2 )= < span class =code-digit> 2
iStruct.data( 3 )= 3
iStruct.data( 4 )= 4
iStruct。数据( 5 )= 5
iStruct.data( 6 )= 6
iStruct.data( 7 )= < span class =code-digit> 7
iStruct.data( 8 )= 8
iStruct.data( 9 )= 9
iStruct.data( 10 )= 10
iStruct.data( 11 )= 11
iStruct.data( 12 )= 12
Test1 = Cpp_TEST1(iStruct)
在C ++方面我做:
< span class =code-keyword> struct myStruct {
long n;
long * data;
VARIANT_BOOL rData;
};
XLSTATLINK_API double __ stdcall Cpp_TEST1(myStruct * iStruct)
{
return 1 ;
}
当我监视iStruct时,我获得了良好的数据值n et rData。
对于数据数组,获得的数据是随机的:
[0] 8388609很长
[1] 4长
[2] 0长
[3] 234122136长
[4 ] 12长
[5] 1长
[6] 634790639长
[7] -2013222912长
[8] 352064696长
[9] 352064792长
[10] 1771379816长
[11] 537长
我的问题是我无法从C ++ DLL中恢复VBA结构中包含的数据数组!!
提前谢谢你; - )
在VB中的数组被定义为安全数组,你必须在C中访问它。
struct myStruct {
long n;
SAFEARRAY *数据;
VARIANT_BOOL rData;
};
取决于期权基础 [ ^ ]语句,数组的下限从0
(零)或开始1
(之一)。如果不使用此语句,则数组必须从0
开始。我建议你阅读这篇文章 VB中的数组 [ ^ ]这可能有助于您了解如何声明和初始化数组。 />
ReDim 保留iStruct.data( 12 )
对于 i = 0 to 11
iStruct.data(i)= i + 1
下一步跨度>
Hello,
I want to transfer into a C ++ structure via a DLL , the content of a VB structure (UTD).
My VB code is as follows :
Private Declare Function Cpp_TEST1 Lib "C:\Users\\TEST1.dll" (ByRef iStruct As myStruct) As Double
Type myStruct
n As Long
data() As Long
rData As Boolean
End Type
iStruct.n = 10
iStruct.rData= True
ReDim iStruct.data(1 To 12)
iStruct.data(1) = 1
iStruct.data(2) = 2
iStruct.data(3) = 3
iStruct.data(4) = 4
iStruct.data(5) = 5
iStruct.data(6) = 6
iStruct.data(7) = 7
iStruct.data(8) = 8
iStruct.data(9) = 9
iStruct.data(10) = 10
iStruct.data(11) = 11
iStruct.data(12) = 12
Test1 = Cpp_TEST1(iStruct)
In C++ side i do :
struct myStruct{
long n;
long *data;
VARIANT_BOOL rData;
};
XLSTATLINK_API double __stdcall Cpp_TEST1(myStruct *iStruct)
{
return 1;
}
When i spy iStruct, I get good values for data n et rData.
For the data array, the data obtained are random :
[0] 8388609 long
[1] 4 long
[2] 0 long
[3] 234122136 long
[4] 12 long
[5] 1 long
[6] 634790639 long
[7] -2013222912 long
[8] 352064696 long
[9] 352064792 long
[10] 1771379816 long
[11] 537 long
My problem is that I can't recover the data array contained in the VBA structure from the C++ DLL !!
Thanks you in advance ;-)
In VB the arrays are defined as safe arrays, you have to access it as such in C.
struct myStruct{ long n; SAFEARRAY *data; VARIANT_BOOL rData; };
Depending on Option Base[^] statement, lower bound of arrays start from0
(zero) or1
(one). If you do not use this statement, array must starts from0
. I'd suggest to read this article Arrays in VB[^] which might help you to understand how to declare and initilize arrays.
ReDim Preserve iStruct.data(12) For i = 0 to 11 iStruct.data(i) = i+1 Next
这篇关于将vba结构发送到C ++ DLL的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!