oqq__L 2023-08-22 19:04 采纳率: 100%
浏览 8
已结题

C#调用c++的动态库,提示约定和参数问题

在写一个接口,调用设备读取银行卡信息,调用的是一个读卡器提供的dll。
接口文档如下:

```c++
int __stdcall ReadPBOCGenARQC(char *Field2, char *Field35, char *Field36,char * ARQC, char *ErrMsg);
接口描述:
        该接口不是立刻返回,循环读卡,流程请参考指令扫码流程 ,超时时间30秒。
入参:    无
出参:    
Field2:银联2域数据,数据转换为ASCII(主账号)
        Field35:银联35域数据,数据转换为ASCII
Field36:银联36域数据,数据转换为ASCII
ARQC:银联55域数据,数据转换为ASCII
返回: 0成功 非零失败
错误:ErrMsg(补充错误信息)
我的代码:

```c#
[DllImport("HealthyCarder.dll", EntryPoint = "ReadPBOCGenARQC", CallingConvention = CallingConvention.Cdecl)]
        public static extern int ReadPBOCGenARQC(StringBuilder Field2, StringBuilder Field35, StringBuilder Field36, StringBuilder ARQC, StringBuilder ErrMsg);
      

运行的时候提示:其他信息: 对 PInvoke 函数“WqReadCard!WqReadCard.clsReadCard::ReadPBOCGenARQC”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
CallingConvention = CallingConvention.Cdecl 这段加不加,都报错。麻烦帮忙看看,指导一下。。谢谢

  • 写回答

3条回答 默认 最新

  • 我可是森森呢 2023-08-23 10:01
    关注

    C#对应char*的数据类型是IntPtr啊

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月5日
  • 已采纳回答 8月28日
  • 创建了问题 8月22日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分