在C中,我有一个属性声明为:
public fixed byte foo[10]
在客户端中查看m函数使用的字符串:
^{pr2}$
在IronPython打印中,它给了我一个字符串类型:
>>> print obj.foo
Baz+<foo>e__FixedBuffer1
尝试使用转换函数会出错。在
>>> print GetString(obj.foo)
expected Byte*, got <Foo>e__FixedBuffer1
在IronPython中正确的读取该属性的方法是什么?在
Tags:
在.NET中是非常特殊的字段。您拥有的一个固定字段(
public fixed byte foo[10]
)被编译成一个特殊的嵌套结构,而固定字段的类型则被转换成该嵌套结构。简而言之,这:编译为:
^{pr2}$您可以使用ILSpy这样的工具亲自查看。在
现在,如果C中的代码有一行
GetString(obj.foo)
,它将被编译成:因此,它直接获取数组的第一个元素的地址并将其作为参数传递给方法(因此
GetString
参数的类型正确,byte*
)。在在IronPython中使用相同的参数调用同一方法时,参数类型仍然是字段的类型:
<foo>e__FixedBuffer0
,它不能转换为byte*
(显然)。进行此方法调用的正确方法是执行与C编译器相同的替换-获取FixedElementField
的地址并将其传递给GetString
,但不幸的是,Python(据我所知)没有类似于C中的&
运算符。在结论是:您不能直接从IronPython访问固定字段。我想说你最好的办法是使用一种“代理”方法,比如:
PS我不是一个IronPython专业人士,所以也许有一个超级的方法可以直接访问foo prop,但是我不知道怎么做。在
相关问题 更多 >
编程相关推荐