将vba结构发送到C ++ DLL的问题 [英] problem to send a vba structure to a C ++ dll

查看:87
本文介绍了将vba结构发送到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 from 0 (zero) or 1(one). If you do not use this statement, array must starts from 0. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆