如何将结构数组从C++传递到C#?我以这种方式将结构从C++传递到C#:声明C++结构:typedefstruct_OrderUpdate{int32_tinstrumentId;/*其他字段*/}OrderUpdate;声明c#struct:publicstructOrderUpdate2{publicintinstrumentId;/*其他字段*/}在C++中声明回调:typedefvoid(__stdcall*OrderUpdateCallback)(OrderUpdate*);__declspec(dllexport)voidInitializeCallback(longorderUpdateCallbackAddress)OrderUpdateCallbackorderUpdateCallback=(CallUpdateCallback)orderAddres;并使用它:OrderUpdatecurOrderUpdate;orderUpdateCallback(&curOrderUpdate);在c#开始化回调和进程中:[DllImport("NativeAdapter.dll"),SuppressUnmanagedCodeSecurity]publicstaticexternvoidInitializeCallback([MarshalAs(UnmanagedType.FunctionPtr)]??OrderUpdateCallbackordersUpdateCallbackPointer)[UnmanagedFunctionPointer(CallingCConvention).StatingFunctionPointer(CallingCConvention).voidOrderUpdateCallback(参考OrderUpdate2值);OrderUpdateCallbackorderUpdateCallback=delegate(refOrderUpdate2value){//工作};初始化回调(orderUpdateCallback);一切正常,但现在我想传递结构数组,即不是OrderUpdate,而是OrderUpdate[]。我怎样才能做到这一点?c++数组是否像c++结构映射c#结构一样“映射”c#数组?我应该手动传递数组长度还是可以计算?如何更新我的功能?也许我可以通过void*以某种方式传递,然后我可以将前4个字节用于数组大小,将下一个size*sizeof(OrderUpdate)字节用于数据?谢谢!更新:另一个单独的问题——即使在最简单的情况下,我也不知道如何映射数组。我无法映射基元数组。例如,有这个C++结构:structorders{signedlonglongreplID;//i8signedlonglongreplRev;//i8signedlonglongreplAct;//i8签名longlongid_ord;//i8有符号整数状态;//i4签名字符操作;//i1signedintisin_id;//i4签名的char目录;//i1字符价格[11];//d16.5signedintamount;//i4signedintamount_rest;//i4signedlonglongid_ord1;//i8signedintinit_amount;//i4};我怎样才能将它映射到c#,我试过:publicstructOrders{publiclongreplID;//i8publiclongreplRev;//i8publiclongreplAct;//i8publiclongid_ord;//i8公共整数状态;//i4公共字符操作;//i1publicintisin_id;//i4公共字符目录;//i1公共字符价格[11];//d16.5//编译错误publicintamount;//i4publicintamount_rest;//i4publiclongid_ord1;//i8publicintinit_amount;//i4}但我不能在C#中声明固定大小的数组。以上就是C#学习教程:如何将结构数组从c++传给c#?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
