下面是我写的C#的:
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct TagData
{
public double value; //返回点的数值
public long time; //返回点的时间,秒
public int status; //返回点的状态
};
class LibWrapper
{
[DllImport("DataInterface.dll", CharSet = CharSet.Ansi, EntryPoint = "GetRTDataByBatch", CallingConvention = CallingConvention.Cdecl)]
public extern static int GetRTDataByBatch([In] string[] tagName, IntPtr tgs, long nCount);
}
for (int i = 0; i < 2; i++)
{
TagData tagInfo = (TagData)Marshal.PtrToStructure((IntPtr)((UInt32)ptArray[0] + i * Marshal.SizeOf(typeof(TagData))), typeof(TagData));
double val = tagInfo.value;
long tm = tagInfo.time;
int state = tagInfo.status;
}
typedef struct TagData_struct{
double value; //返回点的数值
long time; //返回点的时间,秒
int status; //返回点的状态
数据类型没对应吧,C#里面是int C++里面是long的话
#2
并没有吧,int、long都是4个byte啊
#3
C#里面的long是C++中的LONGLONG,所以C#结构体中time应该是int型的
#4
好像不是吧?
#5
C#里面的long是C++中的LONGLONG,所以C#结构体中time应该是int型的
这样啊,谢谢你和1L可是改完了我得到的数据还是不对的
如果把函数声明成
public extern static int GetRTDataByBatch([In] string[] tagName, ref TagData[] tgs, long nCount);
后面用结构体数组直接传参可以得到第一个值是正确的,可是后面又不对了
#6
C#里面的long是C++中的LONGLONG,所以C#结构体中time应该是int型的
这样啊,谢谢你和1L可是改完了我得到的数据还是不对的
如果把函数声明成
public extern static int GetRTDataByBatch([In] string[] tagName, ref TagData[] tgs, long nCount);
后面用结构体数组直接传参可以得到第一个值是正确的,可是后面又不对了
typedef struct TagData_struct{
double value; //返回点的数值
long time; //返回点的时间,秒
int status; //返回点的状态
数据类型没对应吧,C#里面是int C++里面是long的话
#2
typedef struct TagData_struct{
double value; //返回点的数值
long time; //返回点的时间,秒
int status; //返回点的状态
数据类型没对应吧,C#里面是int C++里面是long的话
并没有吧,int、long都是4个byte啊
#3
C#里面的long是C++中的LONGLONG,所以C#结构体中time应该是int型的
#4
typedef struct TagData_struct{
double value; //返回点的数值
long time; //返回点的时间,秒
int status; //返回点的状态
数据类型没对应吧,C#里面是int C++里面是long的话
并没有吧,int、long都是4个byte啊
好像不是吧?
#5
C#里面的long是C++中的LONGLONG,所以C#结构体中time应该是int型的
这样啊,谢谢你和1L可是改完了我得到的数据还是不对的
如果把函数声明成
public extern static int GetRTDataByBatch([In] string[] tagName, ref TagData[] tgs, long nCount);
后面用结构体数组直接传参可以得到第一个值是正确的,可是后面又不对了
#6
C#里面的long是C++中的LONGLONG,所以C#结构体中time应该是int型的
这样啊,谢谢你和1L可是改完了我得到的数据还是不对的
如果把函数声明成
public extern static int GetRTDataByBatch([In] string[] tagName, ref TagData[] tgs, long nCount);
后面用结构体数组直接传参可以得到第一个值是正确的,可是后面又不对了