1:在DBOP_API.dll中,定义了如下的结构体和API#pragma pack(1)
struct DBOP_SNAPSHOT_TAG_VAL //描述标签点值的相关信息的结构
{
TAG_ID tagID; /* 标签点的唯一ID */
TIMESTAMP timeStamp; /* 秒级时间戳 */
unsigned short ms; /* 毫秒 */
unsigned char tagType; /*该标签点的值类型 */
unsigned char quality; /* 数据质量 */
unsigned char val[1]; /* 当前值,根据标签点数据类型的不同长度不一 ,变化范围1----128 ,这里用到了越界*/
};DBOP_API int DBOP_SetSnapshotValue ( IN TAG_ID tagID, IN struct DBOP_SNAPSHOT_TAG_VAL* pVal);
DBOP_API int DBOP_GetSnapshotValue ( IN TAG_ID tagID, OUT struct DBOP_SNAPSHOT_TAG_VAL* pVal, IN int bufLen);
2:现在需要在c#下面调用:[DllImport("dbop_dll.dll", EntryPoint = "DBOP_SetSnapshotValue", CharSet = CharSet.Ansi)]
public static extern int DBOP_SetSnapshotValue( uint tagID, APICommonDataStruct.DBOP_SNAPSHOT_TAG_VAL pVal);
[DllImport("dbop_dll.dll", EntryPoint = "DBOP_GetSnapshotValue", CharSet = CharSet.Ansi)]
public static extern int DBOP_GetSnapshotValue(uint tagID, ref DBOP_SNAPSHOT_TAG_VAL pVal, int bufLen); public struct DBOP_SNAPSHOT_TAG_VAL //描述标签点值的相关信息的结构
{
public uint tagID; /* 标签点的唯一ID */
public uint timeStamp; /* 秒级时间戳 */
public ushort ms; /* 毫秒 */
public byte tagType; /*该标签点的值类型 */
//[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1)]
public byte quality; /* 数据质量 */
[MarshalAs(UnmanagedType.ByValArray, SizeConst =128)]
public byte [] val; /* 该标签点的值的第一个字节 */
};
其中最后一个字节数组取的前面变长结构体的最大长度3 现在的问题是我可以读取数据,但是无法将数据写入!希望各位知道的指教啊,感激不尽!
struct DBOP_SNAPSHOT_TAG_VAL //描述标签点值的相关信息的结构
{
TAG_ID tagID; /* 标签点的唯一ID */
TIMESTAMP timeStamp; /* 秒级时间戳 */
unsigned short ms; /* 毫秒 */
unsigned char tagType; /*该标签点的值类型 */
unsigned char quality; /* 数据质量 */
unsigned char val[1]; /* 当前值,根据标签点数据类型的不同长度不一 ,变化范围1----128 ,这里用到了越界*/
};DBOP_API int DBOP_SetSnapshotValue ( IN TAG_ID tagID, IN struct DBOP_SNAPSHOT_TAG_VAL* pVal);
DBOP_API int DBOP_GetSnapshotValue ( IN TAG_ID tagID, OUT struct DBOP_SNAPSHOT_TAG_VAL* pVal, IN int bufLen);
2:现在需要在c#下面调用:[DllImport("dbop_dll.dll", EntryPoint = "DBOP_SetSnapshotValue", CharSet = CharSet.Ansi)]
public static extern int DBOP_SetSnapshotValue( uint tagID, APICommonDataStruct.DBOP_SNAPSHOT_TAG_VAL pVal);
[DllImport("dbop_dll.dll", EntryPoint = "DBOP_GetSnapshotValue", CharSet = CharSet.Ansi)]
public static extern int DBOP_GetSnapshotValue(uint tagID, ref DBOP_SNAPSHOT_TAG_VAL pVal, int bufLen); public struct DBOP_SNAPSHOT_TAG_VAL //描述标签点值的相关信息的结构
{
public uint tagID; /* 标签点的唯一ID */
public uint timeStamp; /* 秒级时间戳 */
public ushort ms; /* 毫秒 */
public byte tagType; /*该标签点的值类型 */
//[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1)]
public byte quality; /* 数据质量 */
[MarshalAs(UnmanagedType.ByValArray, SizeConst =128)]
public byte [] val; /* 该标签点的值的第一个字节 */
};
其中最后一个字节数组取的前面变长结构体的最大长度3 现在的问题是我可以读取数据,但是无法将数据写入!希望各位知道的指教啊,感激不尽!
[DllImport("dbop_dll.dll", EntryPoint = "DBOP_SetSnapshotValue", CharSet = CharSet.Ansi)]
public static extern int DBOP_SetSnapshotValue( uint tagID,ref APICommonDataStruct.DBOP_SNAPSHOT_TAG_VAL pVal);
很笨的办法