gpt4 book ai didi

c++ - vb.net 和 c++/clr 数组长度

转载 作者:行者123 更新时间:2023-11-28 05:58:25 27 4
gpt4 key购买 nike

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

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

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

result = vbcalltocppcode(array)

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

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

如果我尝试使用以下方法提取长度

size_t cpparrsize = clrarray->GetLength(1);

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

(这样做的原因是,当我尝试在 native C++ 代码中使用等级 2 和 3 的数组填充它时,假设在 native C++ 中数组是一维的,我丢失了一些值,即一些值被放入我不想要的 clrarray[*,11]。)

当然,我可以通过跳过我认为是第 11 个索引的内容来解决这个问题,但由于我不确定这似乎有点危险。

最佳答案

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

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

修复:

Dim arrsize = 9

关于c++ - vb.net 和 c++/clr 数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33729658/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com