我嘗試調用代碼int size = Marshal.SizeOf(typeof(MyStruct))
,但它拋出以下異常:爲什麼我不能爲此C#結構執行Marshal.SizeOf()?
類型「MYSTRUCT」不能被封送一個非託管的結構;無法計算出有意義的大小或偏移量。
我的結構如下:
[StructLayout(LayoutKind.Sequential)]
public struct MyStruct
{
[MarshalAs(UnmanagedType.U4)]
public UInt32 version;
[MarshalAs(UnmanagedType.FunctionPtr)]
public IntPtr Start;
[MarshalAs(UnmanagedType.FunctionPtr)]
public IntPtr Stop;
// And a bunch more IntPtr, all declared the same way.
}
的結構應該被傳遞到C-土地,那裏的C代碼將使用其內容作爲函數指針。我看不到如何計算大小會失敗,任何人都可以幫忙?
感謝您的反饋。我目前通過執行'Marshal.GetFunctionPointerForDelegate(無論)'來填充結構體。由於各種原因,我想保留結構成員爲'IntPtr' - 如果我只是刪除'[MarshalAs(UnmanagedType.FunctionPtr)]'將兼容? – FusterCluck
使用GetFunctionPointerForDelegate()不會改變答案中的任何內容,但同樣的問題也適用。是的,就像將該字段聲明爲委託類型一樣,您也不需要IntPtr上的[MarshalAs]。 –