目前手上有接口文件为:ybinterface.dll,辅助动态库包括:MCIF.dll、SICARD.dll等,还包括MCIF.ini等配置文件!
以下是说明文档,我想通过C# winform来调用上述接口文件,详细如何编写?
这里有几个问题,实在搞不清:C++下的char * 在C#中如何处理?“位数”如何处理,因为好像内存分配不够会报错的!
所以请高手帮忙写一个详细的例子代码!(包括如何开始调用dll,不要嘲笑,我是新手!)谢谢了!函数原型:
int YBIOF (char* TransType, char* ProcessingCode, char* HosCode, char* OPTRCode,char* BusiCycle, char* CenterCode, char* SenderSerialNo, char* InputStr, char* InputStrAcc, int   ItemNumIndicator, char* ReceiverSerialNo, char* OutputStr, int*  OutBufLen, char* ResponseCode char* OnOffLineFlag, char* CardInfo, char* IsCpuCard);参数说明:
TransType: 入参,(4位) 
ProcessingCode: 入参,(6位)
HosCode: 入参,(4位)
OPTRCode: 入参,(8位) 
BusiCycle: 入参,(27位)
CenterCode: 入参,(4位)
SenderSerialNo: 入参,(30位)
InputStr : 入参,(1024位)
InputStrAcc : 入参,(卡号|0|)最后必须要以管道分割符号‘|’结尾
ItemIndicator:入参,结束标志(上传条数大于1:第一条标识为1,中间记录统一标识为2,最后一条标识为9 ;上传条数等于1:标识为0)
ReceiverSerialNo: 出参,(最大30位)
OutputStr: 出参,返回信息,最后以管道分割符号’|’结尾。客户程序必须在调用本函数之前为其分配不少于1024字节的空间,如果未给本参数分配空间或分配的空间长度小于实际返回的长度,客户程序将会出现内存保护错误。
OutBufLen:入参,指定OutputStr的长度。
ResponseCode: 出参,(2位) 。99 表示业务错误,错误描述放在OutputStr中;00 表示正确
OnOffLineFlag:入参, 固定传入1,表示联机交易。
CardInfo: 入参,暂不使用,可传空。
IsCpuCard: 入参,(0、1)分别传入不同的类型。
返回值:
0 :成功。
非0 :失败,原因参见错误信息

解决方案 »

  1.   

    用 DllImportAttibute[DllImport( "ybinterface.dll" )]
    public static extern int YBIOF (string TransType, string ProcessingCode, /* 后略 */); // 没有函数体
      

  2.   


    这一步我是知道的,到程序中用的时候怎么用呢?比如:我要用TransType这个变量呢?这是入参,是不是用ref?怎么用?“试读取或写入受保护的内存。这通常指示其他内存已损坏。”这个错是什么意思?是不是给变量分的存储空间不够?谢谢!
      

  3.   

    说实话没有用 DllImport 加载过非系统函数,有些问题也不是很清楚
    如果是入参的话,ref 并不必要,出参可以用 out,但 DllImport 会怎么对应不是很清楚,感觉上很有可能对应的是&而非*。而且这里的参数前没有加 const,如果函数体中试图改写必然会出错。还有 .NET 分配的内存肯定足够放下你传入的所有数据的,但如果函数会访问此外的数据,也可能会出错。
    之前没注意到有两个出参,可以尝试将 string 改成 sbyte[],分配足够的大小传过去试试