当前位置:编程学习 > C#/ASP.NET >>

尝试读取或写入受保护的内存。这通常指示其他内存已损坏。


结构体
typedef struct STRU_TAG_VALUE
{
long  lTagID;           // 点号
char  szTagSource[128];  //采集点的数据源结点(工位号)
WORD  cTagType; //(R 浮点数/S字符串/B开关/L整形)
Long  nTagState; //保存当前点质量(好/坏/不确定)
Long  lTimeStamp; //该点值的时间戳
union{                      //点值
float  fValue;     //浮点值
long  lValue;         //长整型
BOOL bValue;         //布尔值
char     szValue[128];    //字符串
};
}TAG_VALUE, *LPTAGVALUE;

方法 DRTDB_SendNewValues(LPTAGVALUE lpTagValues, long lTagCount)
            参数:lpTagValues为要发送TAG_VALUE数组的地址,lTagCount为要发送的点的个数

结构体
       [StructLayout(LayoutKind.Sequential)]
        public struct TAG_VALUE
        {  
            public int tagID;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
            public byte[] TagName;         
            public UInt16 tagType;   
            public int tagState;    
            public int TimeStamp;             
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]   
            public byte[] Value;   
        }
导入方法
        [DllImport("DeviceRtdb.dll")]
        public static extern unsafe  int DRTDB_SendNewValues(ref  AGAPI.TAG_VALUE[]  Values, int lTagCount);
调用时出现  :尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 --------------------编程问答-------------------- 补充:第一部分是原c/c++代码   ,第二部分是c# --------------------编程问答-------------------- long 是 int64
dword 是 ushort --------------------编程问答--------------------
Win32 Types CLR Type
char, INT8, SBYTE, CHAR System.SByte
short, short int, INT16, SHORT System.Int16
int, long, long int, INT32, LONG32, BOOL , INT System.Int32
__int64, INT64, LONGLONG System.Int64
unsigned char, UINT8, UCHAR , BYTE System.Byte
unsigned short, UINT16, USHORT, WORD, ATOM, WCHAR , __wchar_t System.UInt16
unsigned, unsigned int, UINT32, ULONG32, DWORD32, ULONG, DWORD, UINT System.UInt32
unsigned __int64, UINT64, DWORDLONG, ULONGLONG System.UInt64
float, FLOAT System.Single
double, long double, DOUBLE System.Double
--------------------编程问答--------------------
handle  void*  System.IntPtr  32 位
byte  unsigned char  System.Byte  8 位
short  short  System.Int16  16 位
word  unsigned short  System.UInt16  16 位
int  int  System.Int32  32 位
uint  unsigned int  System.UInt32  32 位
long  long  System.Int32  32 位
bool  long  System.Int32  32 位
dword  unsigned long  System.UInt32  32 位
ulong  unsigned long  System.UInt32  32 位
char  char  System.Char  用 ANSI 修饰。
lpstr  char*  System.String 或 System.StringBuilder  用 ANSI 修饰。
lpcstr  const char*  System.String 或 System.StringBuilder  用 ANSI 修饰。
lpwstr  wchar_t*  System.String 或 System.StringBuilder  用 Unicode 修饰。
lpcwstr  const wchar_t*  System.String 或 System.StringBuilder  用 Unicode 修饰。
float  float  System.Single  32 位
double  double  System.Double  64 位
我已经查过很多了 在定义结构体的时候类型转换方面应该没什么问题了  我觉得关键在我声明他的方法是是否正确 --------------------编程问答-------------------- 记混了,是c#里的long=int64
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,