Csharp/C#教程:如何在C#中编组结构数组?分享


如何在C#中编组结构数组?

我在C#中有以下结构:

[StructLayoutAttribute(LayoutKind.Sequential)] public struct RECORD { public uint m1; public uint m2; public uint m3; } 

我还需要将这些结构的数组 (固定长度)传递给本机代码,后者将一些数据写入这些结构。 该数组在C#中分配并传递给C dll。 我将导入的函数声明为:

 [DllImport("marshall.dll", CallingConvention = CallingConvention.Cdecl)] private static extern void doIt(RECORD[] dataRecord); 

但我没有得到任何数据。 我已经尝试了PInvoke Interop助手。 我应该在这里使用IntPtr吗? 有任何想法吗?

编辑:

以下是调用本机函数的C#代码:

 RECORD[] rec = new RECORD[256]; doIt(rec); // values of rec are all zero here 

这是C函数:

 int doIt(RECORD* rec) { // deref pointer and write some data } 

我远不是P / Invoke专家,但我想知道是否将它作为输入/输出参数可能会有所帮助:

 DllImport("marshall.dll", CallingConvention = CallingConvention.Cdecl)] private static extern void doIt([In, Out] RECORD[] dataRecord); 

我不会想到这是必要的,就像LayoutKind.Sequential我希望你的结构已经是一个blittable类型,并且数组也是blittable。

上述就是C#学习教程:如何在C#中编组结构数组?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1033467.html

(0)
上一篇 2022年1月18日
下一篇 2022年1月18日

精彩推荐