C#调用VC++写的DLL时报错:无效的托管/非托管类型组合(Int16/UInt16 必须与 I2 或 U2 成对出现)

hzj19800817 2008-12-07 10:32:02
函数原型: unsigned short GX_GetMessageForWindows(
unsigned short WaitTime,PGX_MESSAGE_INFO pMessageBuffer)
功 能: 获取USB语音盒的事件
参 数: WaitTime 无意义,保留
pMessageBuffer 指向GX_MESSAGE_INFO结构的地址指针,用于存放返回的事件,GX_MESSAGE_INFO的结构定义如下:
typedef struct _GX_MESSAGE_INFO
{
USHORT MessageCode;
USHORT ChannelNo;
USHORT Parameter[6];
} GX_MESSAGE_INFO, *PGX_MESSAGE_INFO;
如果该函数返回0,则表示有事件发生,事件类型以及其它指
示存于上面结构中。
上面是是函数原型
=======================================================
[DllImport("GxUsb.dll")]
public extern static short GX_GetFskCallerID(short ChannelNo, StringBuilder SDateTime, StringBuilder TelNo, StringBuilder Name);
这是C#调用定义
=======================================================
/// <summary>
/// 存放返回事件结构类
/// </summary>
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct GX_MESSAGE_INFO
{
public ushort MessageCode;
public UInt16 ChannelNo;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public UInt16 Parameter;
//public int[] Parameter;
}
这是C#中定义的返回事件的结构
====================================================
在进行函数调用时总是报错:无法封送处理类型为“GX_MESSAGE_INFO”的字段“Parameter”: 无效的托管/非托管类型组合(Int16/UInt16 必须与 I2 或 U2 成对出现)。
其中结构中各字段类型我已经试过int,ushort,uint16,uint类型
...全文
209 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
mygodsos 2008-12-12
  • 打赏
  • 举报
回复
路过帮顶
=============
11月6日,论坛升级公告,积分已经做了调整!
http://topic.csdn.net/u/20081107/11/b27dc75f-14b1-4594-9de3-5b18d9e36a11.html
此次调整增加了两个新的可用分获取渠道:
1:帖子被推荐(加精)后,帖主可以获得88分的可用分奖励;
2:帖子结帖后会返还帖主50%的悬赏分,无满意结帖不返还分数;
3:接下来会不断增加新的可用分获取途径,比如参与活动赠送等,请大家多关注;

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧