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

标签 c++ arrays vb.net

我有一个调用 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/

相关文章:

c++ - dll 缺少对 Windows 7 文件的依赖项

java - 使用Java删除数组中中间元素的上一个和下一个元素并缩小数组

c - 在 C 中使用另一个数组初始化数组大小

javascript - ClojureScript 数组性能是否需要 mod - 或者只是关于边界检查?

C++/QT - 通过 QByteArray 将数据转换为不同的格式不同于读入结构

c++ - 有没有简单的方法来公开私有(private)父类 C++ 的方法

mysql - vb.net 算术运算导致溢出

vb.net - vb.net 中 datagridview 问题中的 ENTER 键作为 TAB

vb.net - 创建时授予文件夹完全访问权限

c++ - 我如何编写程序以仅查看两个字母之一的程序的索引 7