如何从使用void *的本机函数调用的托管委托中的IntPtr参数获取整数值?

时间:2016-06-23 09:59:07

标签: c# pinvoke managed

我有本机功能

void SetValue(char *FieldName, void *pValue);

我希望将其更改为调用早期的set callback / delegate

有签名

void SetValueDelegate(string fieldName, IntPtr value);

我这样调用原生SetValue:

int IntValue = 0;
SetValue("MyField", &IntValue);

现在我认为我可以将它投射到托管委托中:

void SetValueDelegate(string fieldName, IntPtr value)
{
    if (fieldName == "MyField")
    {
        int intValue = (int)value;
    }
}

这不起作用。如果施展得很长,它的值是204790096。

应如何做到这一点?

1 个答案:

答案 0 :(得分:8)

在托管代码中,valueint变量的地址。因此,您可以像这样阅读该变量:

int intValue = Marshal.ReadInt32(value);

您的代码只是读取地址,而不是存储在该地址的值。