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

How to get integer value from IntPtr-parameter in managed delegate that is called from native function with void *?

我有原生功能

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

我想将其更改为调用更早的设置 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;
    }
}

这不起作用。如果转换为 long,它的值为 204790096。

应该怎么做?

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

int intValue = Marshal.ReadInt32(value);

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