vc中的结构为
typedef struct _Addr
{
BYTE Length;
BYTE Type;
BYTE Self[32];
}Addr;
typedef struct _Info
{
enum EReceiveState State;
BYTE Self[512];
BYTE Time[20];
Addr SmscAddr;
Addr OriginalAddr;
}Info;我在C#中声明该结构的原型为
[ StructLayout( LayoutKind.Sequential, CharSet=CharSet.Ansi )]
public class Info
{
public int recsta;
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=512 )]
public String self;
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=20 )]
public String smscTime;
public byte cAddlength;
public byte cAddtype;
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=32 )]
public String cAddself;
public byte oAddlength ;
public byte oAddtype;
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=32 )]
public String oAddself;
}现需要将C#中该原型的一个实例做为参数传入vc中,由vc中的函数对其做出修改。但我所声明的这个原型似乎不对,没法得到正确的结果。请各位指教一下,不胜感激!
typedef struct _Addr
{
BYTE Length;
BYTE Type;
BYTE Self[32];
}Addr;
typedef struct _Info
{
enum EReceiveState State;
BYTE Self[512];
BYTE Time[20];
Addr SmscAddr;
Addr OriginalAddr;
}Info;我在C#中声明该结构的原型为
[ StructLayout( LayoutKind.Sequential, CharSet=CharSet.Ansi )]
public class Info
{
public int recsta;
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=512 )]
public String self;
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=20 )]
public String smscTime;
public byte cAddlength;
public byte cAddtype;
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=32 )]
public String cAddself;
public byte oAddlength ;
public byte oAddtype;
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=32 )]
public String oAddself;
}现需要将C#中该原型的一个实例做为参数传入vc中,由vc中的函数对其做出修改。但我所声明的这个原型似乎不对,没法得到正确的结果。请各位指教一下,不胜感激!
解决方案 »
- C# picturebox图片缩放
- 【oj每周推荐】谈谈C#中的泛型
- C# xml 序列化的问题。 现在有对象 IEnumerable<T> xmlData,实现将其序列化到xml文件中指定节点nodeName
- 页面刷新后,ArrayList数据丢失了
- 如何把一个模型快速的赋值给另一个模型
- 将listView中数据读入xml后,如何再将其读出,及如何实现数据检索~~~~~~~~~
- 项目发布后,xp安装弹出GAC System.Data.Entity 版本 3.5.0
- 模拟登陆网站之后操作
- 如何用C#实现对系统变量Path的修改?
- 如何计算两个时间之间相差多少秒?
- 在线急等!正则表达式替换出错。
- [十万火急]
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconstructssample.htm
---》
[ MarshalAs( UnmanagedType.ByValArray, SizeConst=3 )]
public byte[] Self;
笔误还是另有原因?
public struct Addr
{
public byte Length;
public byte Type;
[ MarshalAs( UnmanagedType.ByValArray, SizeConst=32 )]
public byte[] Self;
}[ StructLayout( LayoutKind.Sequential)]
pubic struct Info
{
public int state;
[ MarshalAs( UnmanagedType.ByValArray, SizeConst=512 )]
public byte[] Self;
[ MarshalAs( UnmanagedType.ByValArray, SizeConst=20 )]
public byte[] Time;
public Addr SmscAddr;
public Addr OriginalAddr;
}
public static extern int Receive([In, Out]Info sinfo, int nIndex);在这里我用了[In,Out]属性,不知在vc的函数中参数是否要用引用类型?
int CSms::Receive(SMsgInfo &sInfo, int nIndex)现在的项目是用c#开发的,要调用该dll中的函数。我不知道怎样从dll中导出类的方法,只好现在dll中写个函数,包装该方法,再将此函数导出。我写的函数为
extern "C" int Receive_conv(SCSms::MsgInfo sMess, int nIndex)
不知道该函数的第一个参数要不要用引用,都试过,不行。
SCSms::MsgInfo * sMess
在project-》Settings-》debug下设置调用该dll的exe文件指针也可以将改变传回调用方去掉哪个byte数组就可以了?
这个试过了,不管用2、把结构中的所有byte数组全去掉,只留byte数据就没问题