麻烦将数组引用从c ++ / cli传递回vb.net

时间:2014-04-04 00:18:09

标签: arrays vb.net c++-cli

我正在尝试将一个对象数组从c ++ / cli方法传回给调用的VB.NET例程。函数调用返回bool以指示成功或失败,并通过参数调用在对象数组中返回扩展信息。

我已将代码剥离为两个示例代码单元以演示问题。

在调用TestReplaceArray之后,应填写TSAResult数组。 e.g:

    Dim TSAResult() As TestStruct = Nothing
    Dim MTCP As New TestCppPart()
    MTCP.TestReplaceArray(TSAResult)

我没有回到我的期望,而且可能让我感到愚蠢的是对他们的回归。

为了获得更多诊断信息以查看事物的分离,我创建了这个调用例程,它填充TestStructureArray只是为了查看调用方法中出现的内容:

'This is the VB.Net caller routine
Dim TestStructArray() As TestStruct = Nothing
TestStructArray = New TestStruct(1) {}
Dim TSAResult() As TestStruct = Nothing

Dim TS As New TestStruct 'put some junk in it
TS.somevar = 10
TestStructArray(0) = TS
TS = New TestStruct
TS.somevar = 11
TestStructArray(1) = TS

Dim MTCP As New TestCppPart()
MTCP.TestReplaceArray(TestStructArray) 'Call the cpp/cli routine
TSAResult = TestStructArray 'take a gander and what came back

调用的C ++ / CLI例程是:

// compiled with /clr
public ref struct TestStruct {
    int somevar;
};

public ref class TestCppPart {
public:
  void TestReplaceArray(array<TestStruct ^>^ IPInfoArray) {
    IPInfoArray = gcnew array<TestStruct ^>(5);
  }
};

我可以看到传递给对象数组的(仅用于测试)就是我传递的内容。我还可以看到我可以用&#34; IPInfoArray = gcnew数组(5)替换数组;&#34;线。它在元素中没有任何东西,但IPInfoArray现在引用了一个5元素数组。

返回VB.Net代码时,原始(仅测试)数组仍然存在并填充。

我能弄清楚的是如何告诉c ++ / cli我想要更新对数组的引用(如果你愿意的话,ByRef),所以它将使用新数组回到VB.Net。

谢谢,我觉得这应该是显而易见的,但我已经卡住了!

1 个答案:

答案 0 :(得分:1)

您的C ++ / CLI代码需要如下所示声明数组(请注意&#39;%&#39;符号):

void TestReplaceArray(array<teststruct^> ^%IPInfoArray)

在这篇文章中也提到: Does the ^ symbol replace C#'s "ref" in parameter passing in C++/CLI code?