将C结构转换为C#? 我有一个用C++编写的API,我试图在C++窗口窗体中使用这个互操作。 我很难定义等价的C#struct。 这里是C++结构: typedef struct { char SerNo[LENGTH]; HANDLE dev; } myDevice; 编辑:
多亏了这些评论,第一项问题才得以解决。 以下是当前的C#状态: 但我什么都不想得到,那就是把手。所以我想现在,我将进一步扩展代码: <>原始C++代码中的函数如下:将C结构转换为C#? 我有一个用C++编写的API,我试图在C++窗口窗体中使用这个互操作。 我很难定义等价的C#struct。 这里是C++结构: typedef struct { char SerNo[LENGTH]; HANDLE dev; } myDevice; 编辑:,c#,interop,marshalling,handle,C#,Interop,Marshalling,Handle,多亏了这些评论,第一项问题才得以解决。 以下是当前的C#状态: 但我什么都不想得到,那就是把手。所以我想现在,我将进一步扩展代码: 原始C++代码中的函数如下: myDevice[] devs = new myDevice[6]; var error = GetDevices(devs); GetDevices(我的设备*devs) 在C#代码中,我做到了这一点: public unsafe static extern GetDevices([In, Out] myDevice[] dev
myDevice[] devs = new myDevice[6];
var error = GetDevices(devs);
GetDevices(我的设备*devs)
在C#代码中,我做到了这一点:
public unsafe static extern GetDevices([In, Out] myDevice[] devs);
现在我使用的代码如下:
myDevice[] devs = new myDevice[6];
var error = GetDevices(devs);
如果我在VisualStudio中查看devs,我会正确地看到SerNo(devs[0].SerNo),但“句柄总是0
我试过IntPtr,byte,但我不知所措。
谢谢,汤姆< /p>这是C代码而不是C++代码。为了编组代码< char Ser0[长度] < /Cord>数组,参见。你可以。<代码> [ MARHALLAS(unMaundType,ByValtSTR,SiZeCist=长度)]字符串塞尔诺< /COD>和<代码> ItPtR DEV < /C> >可以是char [],Byth[]或字符串,用MarshalAs装饰。将其设置为ByValArray或ByValTStr。您需要哪一个取决于C代码,它是否在字段中存储以0结尾的C字符串,以及它采用的编码方式。如果您不知道,可以从byte[]开始,调试器可以为您提供一些见解。@dbc您发送的链接适用于第一个条目!这尤其是:[MarshalAsAttribute(UnmanagedType.ByValTStr,SizeConst=64)]公共字符串序列号;