3
我想抽象編組IntPtr從結構(實際上是類,所以它是引用類型)與本機代碼共享數據。隱藏C#實現使用的參數
我有這樣的輔助類:
class NativeStruct<StructType> : IDisposable
{
public NativeStruct()
{
_DataPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(StructType)));
Marshal.PtrToStructure(_DataPtr, _Data);
}
public NativeStruct(IntPtr dataPtr)
{
_DataPtr = dataPtr;
Marshal.PtrToStructure(_DataPtr, _Data);
}
void IDisposable.Dispose()
{
Marshal.StructureToPtr(_Data, _DataPtr, true);
}
public StructType Data { get { return _Data; } }
IntPtr _DataPtr;
public StructType _Data;
}
反正有使此代碼隱:
using (Shared_s data = new Toolbox.NativeStruct<DataStruct>(myIntPtr).Data)
{
data.someMember = someValue;
}
一些方法來改變這
EditStruct(DataStruct, myIntPtr)
{
data.someMember = someValue;
}
在C++中我會已經使用了一個宏,如
#define EditStruct(StructType, IntPtr) using \
(Shared_s data = new Toolbox.NativeStruct<StructType>(IntPtr).data)
這看起來比更好然而,使用聲明,我不知道如何實現。 –
這就是實現。 'data => {...}'被轉換成一個委託給一個方法,在'EditStruct()'中被稱爲'action(data)'。 –
@Xaade我「走過」這條路線一次。我已經在大多數情況下使用了香草。語法明智,這是嵌套代碼IMOHO的噩夢。 – 2011-09-08 19:26:47