gpt4 book ai didi

c# - PInvoke一个结构指针来获取数据

转载 作者:行者123 更新时间:2023-11-30 20:47:18 25 4
gpt4 key购买 nike

C 代码:

// Device description structure
struct DeviceInfo
{
unsigned short deviceID;
unsigned short productID;
unsigned short versionNumber;
wchar_t* deviceName;
};

void __cdecl GetAttachedDevices(
int* count,
DeviceInfo* deviceInfoList
);

和 PInvoke C# 代码以使用此 C DLL:

    public struct DeviceInfo
{
public ushort deviceID;
public ushort productID;
public ushort versionNumber;
public IntPtr deviceName;
};

[DllImport("Native.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern void GetAttachedDevices(ref int count, ref DeviceInfo deviceInfoList);

当我使用此 C# 代码时:

    int count = 0;
DeviceInfo dev = new DeviceInfo();

GetAttachedDevices(ref count, ref dev);

我在 dev 中只获得一个设备信息(当 count 中有 2 个设备时)。

我应该怎么做才能获取所有设备数据?

最佳答案

您需要分配并传递一个数组。像这样声明函数:

[DllImport("Native.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern void GetAttachedDevices(
ref int count,
[In, Out] DeviceInfo[] deviceInfoList
);

这样调用它:

int count = 16; // not sure how you are expected to come up with this value
DeviceInfo[] dev = new DeviceInfo[count];

GetAttachedDevices(ref count, dev);

如何分配数组?也许该函数允许您为数组传递一个空指针以获得所需的大小。在这种情况下,您有:

int count = 0;
GetAttachedDevices(ref count, null);
DeviceInfo[] dev = new DeviceInfo[count];
GetAttachedDevices(ref count, dev);

您将能够从 C 代码或其文档中计算出这些细节。

关于c# - PInvoke一个结构指针来获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25892205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com