作者immj (....)
看板C_Sharp
标题[问题] 即时软体RTX的Shared memory
时间Thu Oct 13 12:32:40 2011
各位版大好
我最近在使用real time软体(RTX)撰写运动控制程式
须用到共用记忆体的技术
程式码如下:
public struct ShareMem
{
public byte[] A;
}
[DllImport("rtapi_w32.dll", CharSet = CharSet.Auto)]
static extern int RtCreateSharedMemory(
int flProtect,
int dwMaximumSizeHigh,
int dwMaximumSizeLow,
[MarshalAs(UnmanagedType.LPWStr)] string lpName,
ref IntPtr location);
ShareMem RTXDataPtr;
public void InitShareMemory(){
RTXDataPtr.A = new byte[4];
pCMD0 = Marshal.AllocHGlobal(Marshal.SizeOf(RTXDataPtr));
hCMD0 = RtCreateSharedMemory(1, 0, Marshal.SizeOf(RTXDataPtr),
"RTX_DATA", ref pCMD0);
RTXDataPtr = (ShareMem)Marshal.PtrToStructure(pCMD0, typeof(ShareMem));
}
现在的问题是当我使用程式码如
RTXDataPtr.A[0] = 1;
时会产生"并未将物件参考设定为物件的执行个体"的错误讯息
请问我该如何修正程式码?
感谢!
PS:RtCreateSharedMemory为RTX软体提供的函式,其原始呼叫码如下:
HANDLE RTAPI RtCreateSharedMemory(
DWORD flProtect,
DWORD dwMaximumSizeHigh,
DWORD dwMaximumSizeLow,
LPCSTR lpName,
VOID ** location
);
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.117.118.185
※ 编辑: immj 来自: 122.117.118.185 (10/13 12:34)