将C对象(CFFI)传递到.NET(Pythonnet) 使用Python,我希望使用在DLL中定义的C或C++结构,并将它们传递给在C语言中编写的.NETDLL。C或C++ DLL使用CFFI添加,.NET一个使用PythNet加载。

将C对象(CFFI)传递到.NET(Pythonnet) 使用Python,我希望使用在DLL中定义的C或C++结构,并将它们传递给在C语言中编写的.NETDLL。C或C++ DLL使用CFFI添加,.NET一个使用PythNet加载。,python,c++,.net,python.net,python-cffi,Python,C++,.net,Python.net,Python Cffi,两个DLL中的结构定义相同 下面是float2的一个简单示例,当然现实更复杂:) 现在,我想创建一个.NET数据类型的数组,或将对象分配给.NET中可用的a结构,并将C类型对象分配给该结构: dot_net_float2_array = System.Array.CreateInstance(dot_net_float2, 100) dot_net_float2_array[0] = c_float2 #does not work dot_net_struct.xy = c_float2 #d

两个DLL中的结构定义相同

下面是float2的一个简单示例,当然现实更复杂:)

现在,我想创建一个.NET数据类型的数组,或将对象分配给.NET中可用的a结构,并将C类型对象分配给该结构:

dot_net_float2_array = System.Array.CreateInstance(dot_net_float2, 100)
dot_net_float2_array[0] = c_float2 #does not work

dot_net_struct.xy = c_float2 #does not work
我收到不同的错误消息,如

TypeError: Cannot convert <cdata 'float2[]' owning 8240 bytes> to dot_net_namespace.float2[]

'_cffi_backend.CDataOwn' value cannot be converted to dot_net_namespace.float2

TypeError: initializer for ctype 'float2' must be a list or tuple or dict or struct-cdata, not float2
TypeError:无法转换为dot\u net\u命名空间。float2[]
“\u cffi\u backend.CDataOwn”值无法转换为dot\u net\u namespace.float2
TypeError:ctype“float2”的初始值设定项必须是列表、元组、dict或struct cdata,而不是float2
我不知道怎么解决这个问题。我正在处理的真正代码应该使用包含结构数组的结构,而我甚至无法运行这个简单的示例:)

当然可以一个字段一个字段地复制结构,但是有没有更方便的方法?这可能吗


是否可以使用
ffi.cast
ffi.buffer

我最终向.NET传递了指针。它们可以像我在这里的另一个问题中描述的那样铸造。一旦我的编辑被审查和接受,完整的答案应该是可见的


在这之后,你可以在C#中编写一个接口,然后在pythonnet中使用该接口。但是这需要一个字段一个字段地复制结构的原语,对吗?我真的很想用施法或者其他什么方法来解决这个问题,但是我到目前为止还没有任何线索。
TypeError: Cannot convert <cdata 'float2[]' owning 8240 bytes> to dot_net_namespace.float2[]

'_cffi_backend.CDataOwn' value cannot be converted to dot_net_namespace.float2

TypeError: initializer for ctype 'float2' must be a list or tuple or dict or struct-cdata, not float2