在我的C#应用​​程序中,我有IntPtr y = VoidPointer(x);,其中VoidPointer(x)是一个非托管函数,它返回void *(void指针)。问题是我没有在C#代码中得到y所指向的正确值。我正在使用Marshal.ReadInt32(y),并尝试过ReadByteReadInt64等。以下是代码段,
C中的非托管函数:

void* VoidPointer()
{
    int Var1 = 7113;
    return &Var1;
}


C#中的托管函数:(使用DllImport访问非托管函数。)


IntPtr z = VoidPointer();

Console.WriteLine(" z = {0} ", Marshal.ReadInt32(z));


但是在输出中我没有得到7113。如何在C#中访问Var1的正确值?

最佳答案

VoidPointer返回一个指向局部变量的指针,该局部变量在函数结束时超出范围。这是未定义的行为。

尝试将Var1声明为静态:

void* VoidPointer()
{
    static int Var1 = 7113;
    return &Var1;
}

09-11 00:01