关于DELPHI中用引用方式传递参数的问题(50分)

  • 主题发起人 nj_wangzhen
  • 开始时间
N

nj_wangzhen

Unregistered / Unconfirmed
GUEST, unregistred user!
如果有一函数需要用引用方式传递的时候
在C中需要在传递的参数前加上一个&
在foxpro 中则需在参数前加上一个@
在vb中需要refrence一下(道听途说来的, 不知是否属实)
那delphi呢??????????
 
var类型。
procedyre test(var aChangeStr);
begin
ShowMessage(aChangeStr);
aChangeStr:='bbb';
end;

procedure TForm1.Button1Click(Sender: TObject);
var str1: String;
begin
str1:='aaa';
test(Str1);
ShowMessage(Str1);
end;
 
问题是我调用的dll库里的函数是用VC写的,它的原型是这样的
int query_handle(char * inputdata,char * outputdata)
我在delphi 中调用时调用不起来
我在delphi中为此函数定义的原型是这样的
function query_handle(var inputdata:widestring;var outputdata:widestring):integer;external 'd:/dll/SiInterface.dll';
最后调用时总是通不过, 此问题困绕了我好几天了,也问了很多次
还没解决
等待中.....
 
beta的意思是........
 
老兄,这不是引用啊:(
int query_handle(char * inputdata,char * outputdata)
这样:
function query_handle(inputdata,outputdata: PChar): Integer;
参数是指向字符的指针,即 PChar
 
beta老兄,能详细点吗???
比方说我这儿有个串'63104|02000025|'传给inputdata
怎么用一个变量返回outputdata的值呢???
帮帮忙,写几句吧
 
大家来帮帮忙啊!!!!
 
高手们呢??????
 
呵呵!其实用const或是var都是引用的。
 
不好意思,多翻了几页,翻过了:)

//比方说我这儿有个串'63104|02000025|'传给inputdata
//怎么用一个变量返回outputdata的值呢???

procedure Change(var indata: string);
begin
indata := indata + indata;
end;

使用:
s := 'abcd';
Change(s);
ShowMessage(s);

你再看看,有问题继续,我在线等你
 
如果不想改变 inputdata 的话,可以这样:
procedure Change(indata: string; var outdata: string);
begin
outdata := indata + indata;
end;

使用:
s := 'abcd';
Change(s);
ShowMessage(s);
 
不好意思, 那天我看没人回答就郁闷的下了
哪知BETA 兄还这么热情的给我回音
不过你说的东西我知道
就是不知道怎么把VC 写的DLL 中的函数调用出来
我再形容一遍
function int query_handle(char * inputdata,char * outputdata)
这是定义在一个VC写的DLL中的函数的原型
按照delphi 程序员指南里的说法在delphi 中应该这么调用

function QUERY_HANDLE(input,outputdata:pchar):integer;external 'SiInterface.dll';
//这里先在DELPHI中重定义一下函数, 然后在一个BUTTON中这么来调用
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
begin
try
setlength(s,100);
if QUERY_HANDLE('63104|0000331893762822|',s)=0 then
begin
SetLength(s, StrLen(PChar(s)));
showmessage(s);
end;
end;
但是每次 if QUERY_HANDLE('63104|0000331893762822|',s)=0 then执行完了就会报错
错误如下:
access violation at address 10001504 in module 'SiInterface.dll', write of
address 004522B8
可是我在VF 下可以用引用返回正确的结果, 是一个串值所以可以排队Dll错误的问题
这个问题我很急,因为是个正式的工程,希望大家帮忙解决
也希望大家帮我UPUP

 
BEAT 老兄,我又见到你啦,能不能给个QQ聊一聊呢????
 
这个问题没有关注吗??????????????[:(][:(][:(]
 
再提一下!!!!
 
等到12点:(
 
已经搞定,现给出答案
function QUERY_HANDLE(input,outputdata:pchar):integer;stdcall;external 'SiInterface.dll';
procedure TForm1.Button1Click(Sender: TObject);
var s:pchar;
begin
getmem(s, 1024);
if QUERY_HANDLE('63104|0000331893762822|',s)=0 then
begin
showmessage(strpas(s));
end;
end;
参考到Another_eYes 的以前的旧帖




 
sorry, 又来晚了:)
呵呵,少了一个 stdcall 啊
 
顶部