C#引用C++函数指针参数的问题

江南小鱼 2014-04-08 09:31:27
C++函数原型
int WINAPI SMGP30_GetDeliverSM(int Ntimeout,SMGP30_DeliverResp *PdeliverResp);

其中
struct SMGP30_DeliverResp
{
char MsgID[20 + 1];
unsigned char uMsgFormat;
char SrcTermID[SMGP_ADDRS_LEN + 1];
unsigned char uIsReport;
unsigned char uMsgLength;
char MsgContent[MAX_SMGP_MSG_LEN + 1];
char DestTermID[SMGP_ADDRS_LEN +1];
char RecvTime[SMGP_RECVTIME_LEN + 1];
unsigned long uTLVMask;
unsigned char uTP_pid;
unsigned char uTP_udhi;
char LinkID[SMGP30_LINKID_LEN + 1];
unsigned char uSubmitMsgType;
unsigned char uSPDealResult;
unsigned char uSrcTermType;
char SrcTermPseudo[SMGP30_PESUDO_LEN + 1];
char Reserved[SMGP30_RESERVED_LEN + 1];
};

请问转换成C#外部函数引用,如下所示,是否准确?
[DllImport("SMEIDll.dll", EntryPoint = "SMGP30_GetDeliverSM")]
protected static extern int SMGP30_GetDeliverSM(int Ntimeout, out string MsgID, out string uMsgFormat, out byte uIsReport, out byte uMsgLength
, out string MsgContent, out string DestTermID, out string RecvTime, out long uTLVMask, out string uTP_pid, out string uTP_udhi
, out string LinkID, out string uSubmitMsgType, out string uSPDealResult, out string uSrcTermType, out string SrcTermPseudo
, out string Reserved)
...全文
134 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
江南小鱼 2014-09-14
  • 打赏
  • 举报
回复
引用 2 楼 staaab 的回复:
对表再扩展一个字段,用作数据变更标识,入库的时判断这个标识是否是与当时出库的标识相同?
如果标识变了,入库的时候逐个字段去对比,而且还要标识出AccountA是否对X字段进行了修改? omg,很麻烦的。
staaab 2014-09-10
  • 打赏
  • 举报
回复
引用 1 楼 lovelj2012 的回复:
没人回答,结贴可惜了。新起一个问题,有兴趣的讨论下。 比如有三张表来管理客户资料 CardInfo,存储客户的基本信息,比如户名、地址、休息日、所属区域等 CustomerInfo,存储客户的电话号码、手机、身份证编号等 WaterMeterInfo,存储客户家里安装的水表的信息,如水表钢印号、水表安装位置、水表类型、口径等 三张表通过CustomerNO唯一关联 有三张界面,对应不同权限的使用人群 A界面,能够维护客户的所有资料,也就是上述三张表信息可查看、修改 B界面,仅能够维护客户信息(CustomerInfo),捎带维护少量CardInfo表的字段 C界面,维护水表信息(WaterMeterInfo) 现在是这样: AccountA,在A界面在查看CustomerNO为123的用户信息 AccountB,在B界面查看CustomerNO为123的客户信息,假使此人在B界面修改了一个字段X(该字段A、B界面都有展现)。AccountB对次字段进行修改保存,然后AccountA对另外的字段也做了修改,进行保存。 因为A界面字段非常多,保存的时候不可能逐个做对比是否和数据库最新数据一致,因为用户数据已经读入内存,点击保存拿界面元素去更新数据库,这样就造成数据错误(A界面的X字段的旧值覆盖AccountB做的修改)。 我觉得,这种业务各位应该都有碰到过,除去保存的时候逐个对比外,有没有简便的办法解决数据覆盖?
对表再扩展一个字段,用作数据变更标识,入库的时判断这个标识是否是与当时出库的标识相同?
江南小鱼 2014-09-09
  • 打赏
  • 举报
回复
没人回答,结贴可惜了。新起一个问题,有兴趣的讨论下。 比如有三张表来管理客户资料 CardInfo,存储客户的基本信息,比如户名、地址、休息日、所属区域等 CustomerInfo,存储客户的电话号码、手机、身份证编号等 WaterMeterInfo,存储客户家里安装的水表的信息,如水表钢印号、水表安装位置、水表类型、口径等 三张表通过CustomerNO唯一关联 有三张界面,对应不同权限的使用人群 A界面,能够维护客户的所有资料,也就是上述三张表信息可查看、修改 B界面,仅能够维护客户信息(CustomerInfo),捎带维护少量CardInfo表的字段 C界面,维护水表信息(WaterMeterInfo) 现在是这样: AccountA,在A界面在查看CustomerNO为123的用户信息 AccountB,在B界面查看CustomerNO为123的客户信息,假使此人在B界面修改了一个字段X(该字段A、B界面都有展现)。AccountB对次字段进行修改保存,然后AccountA对另外的字段也做了修改,进行保存。 因为A界面字段非常多,保存的时候不可能逐个做对比是否和数据库最新数据一致,因为用户数据已经读入内存,点击保存拿界面元素去更新数据库,这样就造成数据错误(A界面的X字段的旧值覆盖AccountB做的修改)。 我觉得,这种业务各位应该都有碰到过,除去保存的时候逐个对比外,有没有简便的办法解决数据覆盖?

110,571

社区成员

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

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

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