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

C# P/Invoke: native output parameter value won't reach managed code

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

C++

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

C#

[DllImport("ProAsaNativeDll.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void outTest(ref int number);

public static int OutTest()
{
    int number = 2;
    outTest(ref number);
    return number; //number = 2
}

请注意,我是我的真实场景,我试图让它与指向结构的指针一起工作,但我决定将其排除在外,因为这不是编组问题;即使是这个简单的代码也行不通。 C++ 代码可以工作,但我不排除是愚蠢的并且在那里有问题:就像我说的,我不太了解 C/C++。

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

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

我相信您的更改只会在您的函数 outTest 的范围内可见。

但是,如果您更改指针……指向……的值,那就另当别论了。差不多是这样的:

*number = *number + 10;

编辑:该位未经测试。哦……还有……我已经很久没有用 C++ 写过任何东西了。也可能是完全错误的。