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