我有一個類定義如下:轉換一個結構到一個IntPtr
[StructLayout(LayoutKind.Sequential)]
public class OUR_MEM_STR
{
public byte[] p;
public int len;
};
這是下面的C結構的等效確定指標:
typedef struct
{
void *p;
int len;
} OUR_MEM_STR;
我用字節[]代替的IntPtr的爲成員p輸入它正在使用的c#項目的方式。
我與LEN = 10和p =新的字節[10]
我想使它一個IntPtr定義的對象OBJ。我如何獲得對象的大小?
IntPtr pObj = Marshal.AllocHGlobal(obj.len + sizeof(int));
Marshal.StructureToPtr(obj, pObj, true);
看看我在那裏做了什麼。它似乎太硬編碼。如果我做下面的代碼片段;
IntPtr pObj = Marshal.AllocHGlobal(Marshal.SizeOf(obj));
否則因爲obj.p返回一個尺寸爲4和由於由指針指向的字節數組截取的存儲器的未10.是4個字節此返回錯誤的大小。
有沒有更好的方法?
你能告訴我們你想要複製的結構的C定義嗎? – JaredPar
@JaredPar,我編輯了問題 –
因此,如果我做IntPtr pObj = Marshal.AllocHGlobal(Marshal.SizeOf(obj));並使用false參數,它應該罰款? –