【问题标题】:vb.net and c++ /clr array lengthvb.net 和 c++ /clr 数组长度
【发布时间】:2015-11-16 06:34:59
【问题描述】:

我有一个调用 c++/clr dll(又调用本机 c++ dll)的 vb.net 可执行文件。我需要在所有三个之间传递数组。在 vb.net 中,我使用以下内容:

Dim arrsize = 10
Dim array(arrsize,arrsize) as Double

然后我将它传递给 c++/clr 代码

result = vbcalltocppcode(array)

在 c++/clr 代码中(在 public ref class 中,我在 vb.net 中创建了一个实例)

bool vbcalltocppcode(array<double,2>^ clrarray)

如果我尝试使用来提取它的长度

size_t cpparrsize = clrarray->GetLength(1);

cpparrsize = 11。这是为什么呢?是否有任何我看不到的开销或什么?

(原因是当我尝试在本机 c++ 代码中使用 2 级和 3 级数组填充它时,假设在本机 c++ 中该数组是一维的,我会丢失一些值,即放入一些值我不想要的 clrarray[*,11]。)

当然,我可以跳过我认为是第 11 个索引来解决这个问题,但因为我不确定这看起来有点危险。

【问题讨论】:

    标签: c++ arrays vb.net


    【解决方案1】:

    这就是 Basic 的工作原理,您实际上分配了一个 11x11 数组。考虑它的最佳方法:指定数组中的最后一个有效索引。

    这种古怪是由于过去 40 年来必须与以前的 Basic 版本保持兼容而引起的。很久以前,数组从 0 开始索引,从 1 开始。在某种程度上,像 Office 这样的 COM 对象模型可以从 1 开始它们的数组。

    修复:

    Dim arrsize = 9
    

    【讨论】:

    • 非常感谢@Hans Passant!
    猜你喜欢
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2016-07-29
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多