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

cha*_*r m 3 c# pinvoke managed

我有本机功能

void SetValue(char *FieldName, void *pValue);
Run Code Online (Sandbox Code Playgroud)

我想改变它来调用早期的set callback/delegate

有签名的

void SetValueDelegate(string fieldName, IntPtr value);
Run Code Online (Sandbox Code Playgroud)

我这样称为本地SetValue:

int IntValue = 0;
SetValue("MyField", &IntValue);
Run Code Online (Sandbox Code Playgroud)

现在我认为我可以将其强制转换为托管委托:

void SetValueDelegate(string fieldName, IntPtr value)
{
    if (fieldName == "MyField")
    {
        int intValue = (int)value;
    }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用.如果施放到长,它的值是204790096.

应该怎么做?

Dav*_*nan 10

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

int intValue = Marshal.ReadInt32(value);
Run Code Online (Sandbox Code Playgroud)

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