如何在c#中访问C指针所指向的值?

本文关键字:指针 访问 | 更新日期: 2023-09-27 18:03:06

在我的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的正确值?

如何在c#中访问C指针所指向的值?

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

尝试将Var1声明为静态:

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