相关疑难解决方法(0)

PInvoke - Marshal一个来自指针的结构数组

我试图在这个问题上回答这个问题

我的结构在C中看起来像这样

typedef struct drive_info_t {
    unsigned char drive_alias[32];
} drive_info_t;
Run Code Online (Sandbox Code Playgroud)

我的功能在C中看起来像这样

unsigned int get_drive_info_list(drive_info_t **list, unsigned int *item_count) {
    //fill list in native C

    //print out in native C
    printf("list.alias - %s\r\n",list[i]->drive_alias);
}
Run Code Online (Sandbox Code Playgroud)

我的C#struct看起来像这样

[StructLayout(LayoutKind.Sequential)]
public struct drive_info_t
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
    public byte[] drive_alias;
}
Run Code Online (Sandbox Code Playgroud)

我的C#函数声明如下所示

[DllImport("mydll.dll", EntryPoint = "get_drive_info_list", CallingConvention = CallingConvention.Cdecl)]
public static extern uint GetDriveInfoList(out System.IntPtr ptr_list_info, out System.IntPtr ptr_count);
Run Code Online (Sandbox Code Playgroud)

我正在这样调用C#函数

IntPtr ptr_list_info = IntPtr.Zero;
IntPtr ptr_cnt = IntPtr.Zero;

ret = …
Run Code Online (Sandbox Code Playgroud)

c c# pinvoke pointers

6
推荐指数
1
解决办法
533
查看次数

标签 统计

c ×1

c# ×1

pinvoke ×1

pointers ×1