Показать сообщение отдельно
  #3  
Старый 11.08.2010, 04:07
xanrias xanrias вне форума
Прохожий
 
Регистрация: 11.08.2010
Сообщения: 3
Репутация: 10
По умолчанию пробую

создал библиотеку

Код:
library Project2;

uses ShareMem,SysUtils, Classes;

procedure ProcStr(AIn : PChar; AOut : PChar);
begin
  StrCopy(AIn, AOut);
end;

exports ProcStr;
begin
end.

пробую вызывать

Код:
unit Unit1;

interface

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

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

var
     Form1: TForm1;
     ProcStr:procedure (AIn : PChar; AOut : PChar);
     LibHandle: THandle;
implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
  AIn, AOut : PChar;
begin
  @ProcStr := nil;
  LibHandle := LoadLibrary('project2.DLL');
  {Если все OK}
  if LibHandle >= 32 then begin
    @ProcStr := GetProcAddress(LibHandle,'ProcStr');
    if @ProcStr <> nil then
  AIn := 'aaa';
  GetMem(AOut,StrLen(AIn)+1);
  ProcStr(AIn,AOut);
  ShowMessage(AOut);
  end;
  FreeLibrary(LibHandle);
  FreeMem(AOut, StrLen(AIn)+1);
end;

end.

получаю ошибку памяти.
Ответить с цитированием