C#P / Invoke:本机输出参数值不会到达托管代码

时间:2016-03-23 18:46:22

标签: c# c++ pointers interop pinvoke

我正在将本机C ++ DLL编组为C#DLL。我在C / C ++中并不是很认可,但是我设法让它工作直到我遇到这个问题。这是一个非常简单的代码示例:

C ++

GET

C#

PROASADLL __declspec(dllexport) void outTest(int* number){
    int temp = *number + 10;
    number = &temp; //*number = 12
}

请注意我是我的真实场景,我正在尝试使用指针指向struct的指针,但我决定将其删除,因为它不是编组问题;即使这个简单的代码也行不通。 C ++代码可以工作,但我不排除在那里愚蠢和有问题:就像我说的,我不太了解C / C ++。

C#包装器方法中的数字变量值不会改变。请帮忙。

1 个答案:

答案 0 :(得分:2)

我认为你的结果很糟糕,因为在你的C ++代码中,你实际上是通过将参数设置为另一个指针来更改参数number

我相信您的更改只会在您的outTest范围内显示。

但是,如果你更改指针...指向的值......那应该是一个不同的故事。非常喜欢这样:

*number = *number + 10;

编辑:此位未经过测试。哦......而且......我还没有用C ++写任何东西。可能也完全错了。