function wsf_getJyxx(soap_endpoint:string;username:string;password:string;zsbh:string;ret:pchar):Integer; stdcall; external 'pimsservice.dll'; //函数声明
delphi中函数如下:
var
soap_endpoint : string;
zsbh : string;
username : string;
password : string;
iReturn : Integer;
ret : Array[0..2000] of Char;
begin
soap_endpoint := 'http://1.0.0.225:8080/PIMSService/service/DataService/';
zsbh := 'DL09T00026';
username := 'admin';
password := 'admin';
iReturn := wsf_getJyxx(soap_endpoint,username,password,zsbh,@ret[0]);
showmessage(ret);
end;
为什么返回值为乱码,是不是数组内存不够?小弟初次接触delphi,望各位大虾指教
delphi中函数如下:
var
soap_endpoint : string;
zsbh : string;
username : string;
password : string;
iReturn : Integer;
ret : Array[0..2000] of Char;
begin
soap_endpoint := 'http://1.0.0.225:8080/PIMSService/service/DataService/';
zsbh := 'DL09T00026';
username := 'admin';
password := 'admin';
iReturn := wsf_getJyxx(soap_endpoint,username,password,zsbh,@ret[0]);
showmessage(ret);
end;
为什么返回值为乱码,是不是数组内存不够?小弟初次接触delphi,望各位大虾指教
解决方案 »
- 写了一个小小软件,是在桌面背景上显示工作日志的,代码贴出来了,还有点小问题,大家看看~
- 谁能教我做透明控件??? 立即给分!!
- 老婆用CSDN50分可用分给我买了条皮带,感谢她!
- 特着急!!!! 百分求一个SQL语句, 大家快进来帮帮我。
- Database Engine error 是怎么回事?
- MessageDlg 怎样预设按纽
- 各位高手望这里看!!!难题
- 关于DICOM图像传输,请指点一下!
- 为什么用Delphi6自带的indy组件的idHttp上传文件,在文件较大时会丢失后面的部分?
- 问题:计数显示实现,比如秒表的显示!!!
- excel问题
- Delphi XE +DBX+SQL Server2008 关于事务回滚问题
c++里喜欢用指针,把你的string类型先改为pchar试试
const int __stdcall wsf_getJyxx(char *soap_endpoint, char* username, char* password, char* zsbh,char* ret);
const int __stdcall wsf_getJyxx(char *soap_endpoint, char* username, char* password, char* zsbh,char* ret);function wsf_getJyxx(soap_endpoint, username,password, zsbh, ret:pchar ):integer; stdcall;
5L的声明可都是pchar类型啊
p:PChar;
GetMem(p,1024);
wsf_getJyxx(soap_endpoint,username,password,zsbh,p);
从地址构造形式上看是使用java、xfire实现的WS,去掉soap_endpoint地址最后一个/试试。
delphi中函数如下:
var
soap_endpoint : string;
zsbh : string;
username : string;
password : string;
iReturn : Integer;
ret : Array[0..2000] of Char;
testret:pchar;
retstr:string;
begin
soap_endpoint := 'http://1.0.0.225:8080/PIMSService/service/DataService/';
zsbh := 'DL09T00026';
username := 'admin';
password := 'admin';
GetMem(testret,1024);
try
iReturn := wsf_getJyxx(pchar(soap_endpoint),pchar(username),pchar(password),pchar(zsbh),testret);
retstr:=testret;
finally
FreeMem(testret);
end;
showmessage(retstr);
end;
--------------------------------------------------------
试试按地址传递参数看看行不行。
给字符数组分配下内存空间
GetMem(ret,2000);
后一个ret看你的调用,应该是返回的字符类型的数组指针试试这样:
function wsf_getJyxx(soap_endpoint, username,password, zsbh:Pchar var ret:array of Pchar):integer;...使用
var
i:integer;
P:array of PChar;
begin
setlength(P,20); //设置数组长度20,注意不能少于函数wsf_getJyxx体内的
for i:=low(P) to high(P) do //初始化; 初始化就已经分配内存,不须要另外分配
P[i]:='';
i:=wsf_getJyxx('A','A','A','A',P);//调用,A改成具体的值
showmessage(P[0]); //访问任一个看看P[0]到P[20]
setlength(P,0);
end;另:如果知道数组长度,直接定义就好,不用动态
这个定义成成var ret:pchar