i__0o0__ 2020-07-17 14:43 采纳率: 66.7%
浏览 492
已采纳

C#调用C++接口时参数传递

C#调用C++接口时参数传递问题,比如 c++接口:

1:

long __stdcall SD_GetInputPass(long ReaderHandle, unsigned char ctime, unsigned char* rlen, unsigned char* cpass) 

2:

  long __stdcall SD_VerifyPin(long ReaderHandle, unsigned char *PIN, short *Sw1Sw2) 

3:

int BankTrans(char*  InputData, char* OutPutData) 

等等类型,在C#中调用时应该如何传递参数?最好能整体说一下原理,拜谢各位大佬。我补充下我调用第一个接口的错误代码,这个代码调用没问题,硬件设备已经执行,只是返回结果时报错,

 [DllImport(@"C:\LD_APOSA8\MisPos.dll")]
public static extern long SD_GetInputPass(long ReaderHandle, string ctime,  byte[]  rlen, byte[] cpass);

long ReaderHandle = long.Parse("03");
string ctime = "01";
byte[] rlen = new byte[10];
byte[] cpass = new byte[20];
SD_GetInputPass(ReaderHandle, ctime, rlen, cpass);

再补充一下,以下两种对照方式我都试过了:

 //c++:unsigned char *   <==>    c#:ref byte
 //c++:unsigned char *   <==>    c#:[MarshalAs(UnmanagedType.LPArray)] byte[]
  • 写回答

2条回答 默认 最新

  • 九头蛇daze 2020-07-17 15:24
    关注

    unsigned char对应byte类型,unsigned char*如果是返回字符数组那么对应byte[]。
    返回的数据,一般前面加个ref表示返回(int nChannel, ref int pnWidth, ref int pnHeight, ref int pnBitCount);这组参数后面两个就是返回的数据。
    char*如果是字符串的话对应string类型,如果是读取加上ref。
    你可以试一下,有问题继续留言,这块我做过,可以协助解决。

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

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵