如何从DLL中返回大于4k的pchar字符串

原创 2004年10月08日 15:29:00

关于:"如何从DLL中返回大于4k的pchar字符串"

斜阳 在 2004-5-27 16:08:17 提供了如下回答, 请您查阅和评估:
--------------------------------------------------------------------------
---
看了你的程序,其实你根本什么都没有传出去,因为你要传出去的字符串在
XS_STRINGLIST.Destroy
已经被释放了,因此你在主程序中访问的是非法的内存
现将你的程序修该如下:
function RunDll:PChar; stdcall;
var
  XS_STRINGLIST: TSTRINGLIST;//接系统设置用
  dd: Integer;
  n: Integer;
BEGIN
  XS_STRINGLIST:=TSTRINGLIST.Create;
  XS_STRINGLIST.Text:='<table border="1" width="100%">';
  for DD := 1 to 300 do
    XS_STRINGLIST.Text := XS_STRINGLIST.Text+'<tr><td
width="33%">DDDFGDFGFDGDDDDD</td><td
width="33%">DFSSFDGSDFASSDFDFSD</td><td
width="34%">'+INTTOSTR(DD)+'</t></tr>';
  XS_STRINGLIST.Text:=XS_STRINGLIST.Text+'</table>';

  //修该部分
  n := Length(XS_STRINGLIST.Text);
  Result := AllocMem(n + 1);
  try
    Move(XS_STRINGLIST.Text[1], Result^, n);
    //一定要记住在调用 RunDll 函数的地方用完了要用FreeMem函数释放这个返回
值,要不然会造成内存泄漏
    //////////////////
  except
    FreeMem(Result);
    Result := nil;
  end;
  //RESULT:=PCHAR(XS_STRINGLIST.Text);
  XS_STRINGLIST.Destroy;
END;


//调用的例子
procedure TForm1.Button1Click(Sender: TObject);
var
  p: PChar;
begin
  p := RunDll;
  try
    if p <> nil then
      memo1.Lines.Add(String(p));
  finally
    FreeMem(p)
  end;
end;

C#调用Delphi Dll返回字符串的示例

  //----------------------Delphi-------------------procedure GetSqlData(ASource: PChar; ADest: PChar...
  • zswang
  • zswang
  • 2007年05月18日 15:57
  • 4334

c#调用Delphi DLL pchar类型的转换

原Delphi格式:  function send_photocmd(pdata,prt:pchar;timeout:integer;var prtLen:integer):integer;stdc...
  • nihongyuan
  • nihongyuan
  • 2011年09月29日 22:48
  • 9380

如何在DLL的输出函数中返回字符串给调用者

function aa( outstr: PChar ): Boolean; stdcall; var straa: string; //必须通过局部变量中转,不能直接使用var参数 beg...
  • shixueli
  • shixueli
  • 2011年03月30日 21:00
  • 1550

C#调用delphi dll接口问题

最近使用C#调用delphi dll中的PChar参数接口,结果出现了内存错误。在Stack上找到了答案,转来此处。 Delphi dll中的声明 procedure Password...
  • genispan
  • genispan
  • 2014年12月18日 22:38
  • 3282

从DLL返回字符串数组

1.调用者分配,调用者释放 调用格式如: int GetDLLString(PCHAR pstr, PDWORD count) 先调用一次GetDLLString(NULL,...)通过第二个参...
  • lanzheng_1113
  • lanzheng_1113
  • 2016年07月26日 10:51
  • 862

JNA中几种返回字符串效果

PAnsiChar,String,Pchar.  PAnsiChar:正确返回数据 String:出现乱码 Pchar:只能获取到第一个字符...
  • a137268431
  • a137268431
  • 2015年08月18日 14:03
  • 1209

c++ dll接口返回字符串

假如说,我们封装的dll 有返回字符串的需求,比如有这么个函数 string oneclass::getString() { string res =  string(); ...do s...
  • lixiangmaty
  • lixiangmaty
  • 2017年02月14日 22:41
  • 2007

PowerBuilder调用Delphi写的Dll时发生的奇怪问题。

  因项目需要,我用Delphi写了一个连接数据库把数据导出到Sql文件的dll,其中使用了TADOQuery组件。其中只有一个导出方法:function DataExport(path,ini_pa...
  • Dangyuhang
  • Dangyuhang
  • 2005年04月11日 13:16
  • 2813

C#调用C++DLL的小总结8---C++Dll中函数返回字符串指针

 C#调用C++DLL的小总结8---C++Dll中函数返回字符串指针 在这个系列的“C#调用C++DLL的小总结6---C++Dll中指针的释放问...
  • u011555996
  • u011555996
  • 2017年04月19日 11:16
  • 1735

DLL字符串参数做返回值的看法

        最近在写几个串口程序,由于以前都是用VB6写ActiveX DLL做通讯 ,里面加入Mscomm32.ocx做为通讯控件,已经很熟练了.可是对于VB的执行效率很是不满意,于是又拿起C+...
  • alpha704
  • alpha704
  • 2007年12月20日 14:30
  • 1210
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何从DLL中返回大于4k的pchar字符串
举报原因:
原因补充:

(最多只允许输入30个字)