一般寫c#代碼基本用不到 相互轉換 只有調用c++中的dll動態庫的時候才用的到
struct轉intptr
public static IntPtr StructToIntPtr<T>(T req) where T : struct { int size = Marshal.SizeOf(req); byte[] bytes = new byte[size]; IntPtr structPtr = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(req, structPtr, false); Marshal.Copy(structPtr, bytes, 0, size); return structPtr; }
用完intptr記得釋放申請的這塊內存(Marshal.FreeHGlobal(IntPtr);)
Intptr轉struct
public static T IntPtrToStruct<T>(IntPtr ptr) where T : struct { object t = Marshal.PtrToStructure(ptr, typeof(T)); Marshal.FreeHGlobal(ptr); if (t is T t1) { return t1; } else { return default(T); } }