internal unsafe Vftbl(IntPtr ptr) { var vftblPtr = Marshal.PtrToStructure <VftblPtr>(ptr); var vftbl = (IntPtr *)vftblPtr.Vftbl; IUnknownVftbl = Marshal.PtrToStructure <IUnknownVftbl>(vftblPtr.Vftbl); getBuffer = Marshal.GetDelegateForFunctionPointer <GetBufferDelegate>(vftbl[3]); }
static NativeMethods() { if (System.IntPtr.Size == 8) { InitMemoryMgr = x64.InitMemoryMgr; ReleaseMemoryMgr = x64.ReleaseMemoryMgr; JoinMemoryMgr = x64.JoinMemoryMgr; GetQueueSize = x64.GetQueueSize; PutBuffer = x64.PutBuffer; GetBuffer = x64.GetBuffer; } else { InitMemoryMgr = x86.InitMemoryMgr; ReleaseMemoryMgr = x86.ReleaseMemoryMgr; JoinMemoryMgr = x86.JoinMemoryMgr; GetQueueSize = x86.GetQueueSize; PutBuffer = x86.PutBuffer; GetBuffer = x86.GetBuffer; } }