在我的C#应用程序中,我有IntPtr y = VoidPointer(x);VoidPointer(x)是一个非托管函数,它返回一个void*(void指针).问题是我没有在C#代码中获得y指向的正确值.我使用Marshal.ReadInt32(y),并尝试ReadByte,ReadInt64等下面是代码片段,
用C非托管函数:
void* VoidPointer()
{
int Var1 = 7113;
return &Var1;
}
Run Code Online (Sandbox Code Playgroud)
C#中的托管函数:(使用DllImport访问非托管函数.)
IntPtr z = VoidPointer();
Console.WriteLine(" z = {0} ", Marshal.ReadInt32(z));
Run Code Online (Sandbox Code Playgroud)
但是在输出中我没有得到7113.如何在C#中访问Var1的正确值?
VoidPointer返回一个指向本地变量的指针,该函数在函数结束时超出范围.这是未定义的行为.
尝试将Var1声明为静态:
void* VoidPointer()
{
static int Var1 = 7113;
return &Var1;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |