动态库函数问题(100分)

  • 主题发起人 sea_cuihai
  • 开始时间
S

sea_cuihai

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在有一些接口信息通过动态库来处理,其他问题都还好,就是关于信息返回的时候存在一些问题.我想要动态库的函数通过参数返回一些信息
procedure interfacepro(valstr1, valstr2, valstr3, valstr4: pchar; valfloat1, valfloat2: extended);
其中我想要得效果就是用户定义变量后执行动态库的这个接口函数我返回相应的查询信息到他的这些参数里,因为我现在使用别人的接口他们就是这么实现的。以前我都是将返回用字符串拼接后用function的返回值返回过来,现在我想用这种方式比较好,不用拆分返回回来的字符串。
开始我在动态库里用变参形势声明函数变量,发现在动态库里赋值都正确,但是外面程序收到的都是乱码。我试了几种方法但是接收过来都是有问题,我简单列一下我的内容,请高手们帮我看一下或者告诉我用什么方法来实现:
动态库关键内容:
procedure UseVal(var OutputStr: pchar); stdcall;
var
TempStr: string;
begin
TempStr := '1234567890';
Outputstr := pchar(TempStr);
showmessage(Outputstr);//此时显示信息都是正确的'1234567890'
end;
调用程序部分:
procedure TFrm_Main.Button1Click(Sender: TObject);
var
ReceiveStr: array [0 .. 255] of char;
begin
UseVal(ReceiveStr);
Edit1.Text := trim(strpas(receivestr));
showmessage(Receivestr);
end;
这里面receivestr就已经不是我要的字符串了
其他的数字实现问题不大,就是字符串有问题,我大概知道是字符串的一些概念上的问题,但是我没有深入了解过delphi对于字符串在内存中怎么管理的,希望高手们帮忙,让我少绕一些弯路。
注:现实中我的接口函数参数有多个,如果只有一个靠函数返回值也都可以完成,现在多个我只能valstr1/valstr2/valstr3这样拼接返回,回来的信息我还要拆分,很麻烦。
 
S

szhcracker

Unregistered / Unconfirmed
GUEST, unregistred user!
你用showmessage(@Receivestr);或者showmessage(^Receivestr);试试。
 
S

sea_cuihai

Unregistered / Unconfirmed
GUEST, unregistred user!
?
你用showmessage(@Receivestr);或者showmessage(^Receivestr);试试。
这个能编译过去吗?不可以吧,我这里不可以.
 
顶部