首页 > 解决方案 > 将 C 结构转换为 C#?

问题描述

我有一个用 C++ 编写的 API,并试图将它与 C# Windows 表单中的互操作一起使用。我很难定义等效的 C# 结构。这是 C++ 结构:

typedef struct
{
    char SerNo[LENGTH];
    HANDLE dev;
} myDevice;

编辑:

感谢评论,第一项已解决。这是当前的 C# 状态:

    public unsafe struct sdrplay_api_DeviceT
    {
        [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 64)]
        string SerNo;

        public IntPtr dev;
    }

然而,我没有尝试得到 HANDLE。所以我想这个时候,我会进一步扩展代码:

在原始C++代码中,有一个函数如下:

GetDevices(myDevice *devs);

在 C# 代码中我已经这样做了:

 public unsafe static extern GetDevices([In, Out] myDevice[] devs);

现在我使用的代码如下:

myDevice[] devs = new myDevice[6];

var error = GetDevices(devs);

如果我在 Visual Studio 中查看开发人员,我会正确看到 SerNo (devs[0].SerNo),但“句柄始终为 0;

我尝试了 IntPtr, byte,但我不知所措。谢谢,汤姆

标签: c#interopmarshallinghandle

解决方案


推荐阅读