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 现在的问题是我可以读取数据,但是无法将数据写入!希望各位知道的指教啊,感激不尽!