我目前正在研究一些代码,它反映了从调用返回到本机dll的结构。一些结构包含IntPtr *字段,这些字段指向以null结尾的指针数组。这些字段需要特殊处理。在反思结构时,我可以识别这些字段,因为它们由自定义属性标记。C#:通过反射检索和使用IntPtr *
下面举例说明什么,我试图做的:
public void ProcessStruct(object theStruct)
{
foreach (FieldInfo fi in theStruct.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance))
{
if (fi.FieldType.IsPointer && IsNullTermArray(fi))
{
//Has the custom attribute, commence processing of
//IntPtr* pointing to null-terminated array
ProcessIntPtr(fi.GetValue(theStruct));
}
else{/*..Other Processing..*/ }
}
}
public void unsafe ProcessIntPtr(IntPtr* ptr)
{
//Iterate over the array and process the elements
//There are pointer operations here.
}
的问题是,
fi.GetValue(theStruct)
返回一个对象,我显然不能直接传递给ProcessIntPtr()。我不能改变ProcessIntPtr()的签名来接受一个对象,因为那样我就不能执行我需要的指针操作。显然,我也不能将对象转换为IntPtr *。
有什么技术可以解决这个问题?
我不是这方面的专家,但我想你可能需要使用不安全{} here..right? – 2009-07-14 15:19:50