我有本机功能
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。
应如何做到这一点?
答案 0 :(得分:8)
在托管代码中,value
是int
变量的地址。因此,您可以像这样阅读该变量:
int intValue = Marshal.ReadInt32(value);
您的代码只是读取地址,而不是存储在该地址的值。