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
在托管代码中,value是int变量的地址.因此,您可以像这样读取该变量:
int intValue = Marshal.ReadInt32(value);
Run Code Online (Sandbox Code Playgroud)
您的代码只是读取地址,而不是存储在该地址的值.