我在C中有一般的回调类型:
typedef int(*OverrideFieldValueSetCB_t)(const char *Dialog, const char *FieldName, void *Value);
和回调:
OverrideFieldValueSetCB_t gOverrideFieldValueSetCB;
和函数我调用C代码将值传递给C#:
int DllGuiSetFieldValue(const char *Dialog, const char *FieldName, void *pValue)
{
return gOverrideFieldValueSetCB(Dialog, FieldName, pValue);
}
在C#代码中,我设置了这种代理:
private static int OverrideFieldValueSetCb(string dialogName, string fieldName, IntPtr value)
{
///...
}
在上面我想根据fieldName将值编组/转换为int或double。
问题:
答案 0 :(得分:2)
"指向double或int"只是在寻找麻烦。
但是,如果您确定自己想要的方式,请查看Marshal
类 - Marshal.ReadInt32
int
和{{{} 1}} Marshal.PtrToStructure<double>
。确保你不要弄乱这两个:)
当然,如果您可以使用double
代码,则无需使用unsafe
。就像在C中一样进行演员表。
示例:
Marshal
答案 1 :(得分:0)
如果dialogName和fieldName表示它是double,我会这样做:
private int ChangeFieldValue(string fieldName, IntPtr newValue)
{
double[] destination = new double[1];
Marshal.Copy(newValue, destination, 0, 1);
对此有何想法?似乎工作。