delphi调用C写的DLL有关问题

delphi调用C写的DLL问题
C的接口:unsigned char* GetData(unsigned char* ip)

我在DELPHI调用的代码:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
  Button1: TButton;
  procedure Button1Click(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
Function GetTankTemp(StrIP:PChar):PChar;stdcall;external 'GetTankTemp.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
  ip,temp : pchar;
begin
  ip := '10.120.1.10';
  Temp:= GetTankTemp(ip);
  showmessage(temp);
end;

end.

返回一直是空,应该是有值的,请大家帮忙是哪个地方写错了,谢谢...




------解决方案--------------------
可能是DLL中的参数不标准吧>>>
------解决方案--------------------
不知道DLL函数返回的是哪里的地址,如果不是返回参数本身或者动态分配的地址,是不能正确返回到应用程序中的
------解决方案--------------------
早就看出你的调用约定错了, 只是没说
另外返回哪里有这么返回的
static char *sdata;
sdata = &recv_msg[0];
return sdata;

recv_msg 退栈就没了。



------解决方案--------------------
跟踪下 Temp:= GetTankTemp(ip);
建议一个字节一个字节的看下,showmessage看到的为空不一定对应空间没数据吧。
------解决方案--------------------
我前面已经说了几次了,应用程序不能与DLL共享数据,GetTankTemp应定义为类似
GetTankTemp(StrIP: PChar; TankTemp: PChar)的形式,通过参数传递,TankTemp应是一个char类型数组的首地址,DLL中将数据拷贝到TankTemp即可。

------解决方案--------------------
你这样用是不行的,你需要注册的时候使用 regasm xxx.dll /tlb mydll.tlb 导出一个tlb文件,然后再工程里面引用这个tlb,就没有任何问题