delphi调用C++的dll出现乱码(实际是调用失败)-身份证接口

本文记录了一次解决C++与Delphi跨语言调用问题的过程,包括函数定义、声明与调用的细节,以及在过程中遇到的乱码、函数返回值错误等问题的排查与解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c++定义函数: 

 int USER_API DCSDT_IdCardContent(int handle, int flag, char *content);

delphi声明函数: 

 Function DCSDT_IdCardContent(hHandle:longint;flag:LongInt;content:pChar):Integer; stdcall;
           external './dcsdtapi.dll' name 'DCSDT_IdCardContent' ;

delphi调用函数:

pInfo:PChar;
GetMem(pInfo,1024*100);
DCSDT_IdCardContent(iIDHandle,1,pInfo);ShowMessage('姓名:'+StrPas(pInfo));

乱码:


1、核查调用入参数据类型是否有问题

delphi调用返回值用longint尝试:无关;

2、采用动态调用;不好使。

3、声明的地方改成  cdecl;  闪退;

4、换种弹出方式 ;空。

5、加上入参中加 var; 不好使。

6、是否日志会有影响;不好使

7、发现函数有返回值,返回值一直是  < 0 失败的,(不是乱码导致的,是失败导致的)未排查出为什么,请求对面开发配合排查吧。

8、不带包编译。不好使

9、先开启内存空间。不好使


与对面开发沟通,发现少调用了一个函数,呜呜呜呜~~~。问题解决,哈哈哈哈。

处理问题的思路:调用函数一般会有成功失败标志,要先看这个,如果成功了再看解析的是否有问题,如果失败了有可能是入参有问题。


资料:Delphi7是Ansi编码的IDE;Delphi在2009以后对应char*的类型为PWideChar,默认使用了Unicode编码,如果要用Ansi编码,必须是PAnsiChar。【https://www.cnblogs.com/spraydew/p/9802508.html

学习到新技能:

1、命令窗口”,输入“tdump ***.dll”,查看内部的函数名【https://blog.csdn.net/qq_22129035/article/details/49863679

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值