如何返回MIB_IPFORWARDROW
數組?如何獲得從C到C#的結構中的非託管可變長度C數組?
struct MIB_IPFORWARDTABLE
{
public uint Size;
[MarshalAs(/* what goes here? */)]
public IPFORWARDROW[] Table;
};
[DllImport("iphlpapi", CharSet = CharSet.Auto)]
private static extern int GetIpForwardTable(
IntPtr /* MIB_IPFORWARDTABLE* */ pIpForwardTable,
ref uint /* ULONG* */ pdwSize,
bool bOrder);
public static MIB_IPFORWARDROW[] Temp()
{
var fwdTable = IntPtr.Zero;
uint size = 0;
var result = GetIpForwardTable(fwdTable, ref size, true);
fwdTable = Marshal.AllocHGlobal((int) size);
result = GetIpForwardTable(fwdTable, ref size, true);
/*
what now ?
I tried:
var table = (MIB_IPFORWARDTABLE) Marshal.PtrToStructure(fwdTable, typeof(MIB_IPFORWARDTABLE));
but table.Table is always null
*/
}
我已經看到了這一點: How do I marshal a struct that contains a variable-sized array to C#?
但無論我做什麼,fwdTable.Table始終爲空,IntPtr.Zero或0.也就是說ofcourse,如果不會引發任何異常..
檢查此:http://stackoverflow.com/questions/162897/marshal-char-in-c-sharp –
@MichaelKniffen - 不要我」 t看看它是如何相關的 – Tar