typedef struct TagData_struct{ double value; //返回点的数值 long time; //返回点的时间,秒 int status; //返回点的状态数据类型没对应吧,C#里面是int C++里面是long的话
并没有吧,int、long都是4个byte啊
C#里面的long是C++中的LONGLONG,所以C#结构体中time应该是int型的
并没有吧,int、long都是4个byte啊 好像不是吧?
这样啊,谢谢你和1L可是改完了我得到的数据还是不对的 如果把函数声明成 public extern static int GetRTDataByBatch([In] string[] tagName, ref TagData[] tgs, long nCount); 后面用结构体数组直接传参可以得到第一个值是正确的,可是后面又不对了
这样啊,谢谢你和1L可是改完了我得到的数据还是不对的 如果把函数声明成 public extern static int GetRTDataByBatch([In] string[] tagName, ref TagData[] tgs, long nCount); 后面用结构体数组直接传参可以得到第一个值是正确的,可是后面又不对了C++的TagData_struct声明要加#pragma pack(1)
谢谢楼上各位,不是对齐的问题 查了大半天MSDN 参考这里 http://msdn.microsoft.com/zh-cn/library/hk9wyw21.aspx[DllImport("DataInterface.dll", CharSet = CharSet.Ansi, EntryPoint = "GetRTDataByBatch", CallingConvention = CallingConvention.Cdecl)] public extern static int GetRTDataByBatch([In] string[] tagName, [In,Out] TagData[] tgs, long nCount);注意第二个参数的[In,Out]属性,单独的in或者out都不行 调用时初始化结构体数组 TagData[] tags = new TagData[2]; for (int i = 0; i < tags.Length; i++) { tags[i] = new TagData(); }iRet = LibWrapper.GetRTDataByBatch(tagNames, tags, 2); 这样就可以了
double value; //返回点的数值
long time; //返回点的时间,秒
int status; //返回点的状态数据类型没对应吧,C#里面是int C++里面是long的话
并没有吧,int、long都是4个byte啊
并没有吧,int、long都是4个byte啊
好像不是吧?
这样啊,谢谢你和1L可是改完了我得到的数据还是不对的
如果把函数声明成
public extern static int GetRTDataByBatch([In] string[] tagName, ref TagData[] tgs, long nCount);
后面用结构体数组直接传参可以得到第一个值是正确的,可是后面又不对了
这样啊,谢谢你和1L可是改完了我得到的数据还是不对的
如果把函数声明成
public extern static int GetRTDataByBatch([In] string[] tagName, ref TagData[] tgs, long nCount);
后面用结构体数组直接传参可以得到第一个值是正确的,可是后面又不对了C++的TagData_struct声明要加#pragma pack(1)
查了大半天MSDN
参考这里
http://msdn.microsoft.com/zh-cn/library/hk9wyw21.aspx[DllImport("DataInterface.dll", CharSet = CharSet.Ansi, EntryPoint = "GetRTDataByBatch", CallingConvention = CallingConvention.Cdecl)]
public extern static int GetRTDataByBatch([In] string[] tagName, [In,Out] TagData[] tgs, long nCount);注意第二个参数的[In,Out]属性,单独的in或者out都不行
调用时初始化结构体数组
TagData[] tags = new TagData[2];
for (int i = 0; i < tags.Length; i++)
{
tags[i] = new TagData();
}iRet = LibWrapper.GetRTDataByBatch(tagNames, tags, 2);
这样就可以了
能给段代码吗,还在入门。。
RtlMoveMemory 会用吗