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】