Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将C结构转换为C#? 我有一个用C++编写的API,我试图在C++窗口窗体中使用这个互操作。 我很难定义等价的C#struct。 这里是C++结构: typedef struct { char SerNo[LENGTH]; HANDLE dev; } myDevice; 编辑:_C#_Interop_Marshalling_Handle - Fatal编程技术网

将C结构转换为C#? 我有一个用C++编写的API,我试图在C++窗口窗体中使用这个互操作。 我很难定义等价的C#struct。 这里是C++结构: typedef struct { char SerNo[LENGTH]; HANDLE dev; } myDevice; 编辑:

将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

多亏了这些评论,第一项问题才得以解决。 以下是当前的C#状态:

但我什么都不想得到,那就是把手。所以我想现在,我将进一步扩展代码:

<>原始C++代码中的函数如下:

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)]公共字符串序列号;