问题来源:
http://www.cnblogs.com/del/archive/2008/12/20/985931.html#1408308
本例效果图:
Dll 文件:
library Lib;
uses
SysUtils, Classes;
{$R *.res}
procedure Test(p: PChar);
const
Title = 'Title ';
var
str: string;
begin
str := p;
StrCopy(p, Title);
StrCat(p, PChar(str));
end;
exports Test;
begin
end.
调用的代码文件:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure Test(p: PChar); external 'Lib.dll';
var num: Integer;
procedure TForm1.Button1Click(Sender: TObject);
var
p: PChar;
begin
Inc(num);
p := StrAlloc(255);
StrCopy(p, PChar(IntToStr(num)));
Test(p);
Text := p;
StrDispose(p);
end;
end.
调用的窗体文件:
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 103
ClientWidth = 173
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 48
Top = 40
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
end