簡體   English   中英

我如何編組列表<int>?

[英]How do i marshal list<int>?

我在c ++中有一個dll,它返回列表,我想在我的c#app中使用它作為List

[DllImport("TaskLib.dll", SetLastError = true, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern List<int> GetProcessesID();

public static List<int> GetID()
{
    List<int> processes = GetProcessesID();//It is impossible to pack a "return value": The basic types can not be packed
    //...
}

Per Jared Par:

任何互操作方案都不支持泛型作為規則。 如果您嘗試生成泛型類型或值,則PInvoke和COM Interop都將失敗。 因此,我認為Marshal.SizeOf在這種情況下未經測試或不受支持,因為它是Marshal特定功能。

請參閱: 編組.NET泛型類型

一種可能的情況

c ++方面

    struct ArrayStruct
    {
        int myarray[2048];
        int length;
    };

    extern "C" __declspec(dllexport) void GetArray(ArrayStruct* a)
    {
        a->length = 10;
        for(int i=0; i<a->length; i++)
            a->myarray[i] = i;
    }

c#側

    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct ArrayStruct
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2048)]
        public int[] myarray;
        public int length;
    }

    [DllImport("TaskLib.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern void GetArray(ref ArrayStruct a);

    public void foo()
    {
        ArrayStruct a = new ArrayStruct();
        GetArray(ref a);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM