[英]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.