在我的C#应用程序中,我有IntPtr y = VoidPointer(x);
,其中VoidPointer(x)是一个返回void *(void指针)的非托管函数。问题是我没有在C#代码中获得y指向的正确值。我正在使用Marshal.ReadInt32(y)
并尝试ReadByte
,ReadInt64
等。以下是代码段,
C中的非托管功能:
void* VoidPointer()
{
int Var1 = 7113;
return &Var1;
}
C#中的托管函数:(使用DllImport访问非托管函数。)
IntPtr z = VoidPointer();
Console.WriteLine(" z = {0} ", Marshal.ReadInt32(z));
但是在输出中我没有得到7113.如何在C#中访问Var1的正确值?
答案 0 :(得分:6)
VoidPointer
返回一个指向局部变量的指针,该函数在函数结束时超出范围。这是未定义的行为。
尝试将Var1声明为静态:
void* VoidPointer()
{
static int Var1 = 7113;
return &Var1;
}