delphixe3调用C语言开发的dll接口中参数之间数据类型转换及处理

在升级到DelphiXE3后,调用C语言开发的DLL接口遇到问题,主要由于Delphi7中的PChar与从Delphi2010开始的PChar(默认为PWideChar)类型差异。解决方法是在DelphiXE3中使用PAnsichar类型来匹配C接口。在实际应用中,涉及Base64解码的参数传递,发现内置解码方法导致乱码或长度错误,最终通过DecodeBase64方法配合字节数组转换成功解决,但具体原因不明。欢迎交流讨论。
摘要由CSDN通过智能技术生成

写这篇博客的原因:之前我是用delphi7开发,在调用c版的dll接口时从没有出现过问题,后来升级为delphixe3版本开发时,出现一些令人头疼的问题,我费了很大劲才解决。

Delphixe3出现如下问题:

举个例子:dll文件接口定义如下

int testDLLfun(unsigned char*a,unsigned long aLen,  unsigned char* b, unsigned long * bLen);

当Delphi调用该函数时,若在delphi7中char*对应的是pchar类型(delphi7中默认的pchar就是PAnsichar类型),而从delphi2010版本以上pchar类型默认指的是PWidechar,因此在delphixe3中我们要定义成PAnsichar类型,在这里我用的是静态调用dll的方式。

function  testDLLfun(a:PAnsiChar;aLen:Integer; b:PAnsiChar;bLen:pInteger):Integer;stdcall;  external'dllName.dll' name  'testDLLfun';

具体实现调用delphi中的testDLLfun方法如下

function test(const  aStr: AnsiString): String;
var aStr1:AnsiString;
bLen,retcode:Integer;
b:PAnsiCh
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值