Einzelnen Beitrag anzeigen

eLse-maestro

Registriert seit: 14. Okt 2006
24 Beiträge
 
#1

Applikation -> DLL und umgekehrt (PChar)

  Alt 4. Feb 2008, 15:50
Hi Leute,
Ich möchte einen string, bzw. einen PChar von einer dll an die Applikation & umgekehrt übergeben.
Mit einem Integer kriege ich das hin, aber nicht mit einem PChar, dann kommt immer eine zugriffsverletzung.

könnt ihr mir da weiterhelfen?
alle meine tutorials sind nur mit integer werten (dsdt.info + ein buch)

applikation:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TInfoFunktion = function(about_what: pchar):pchar; stdcall;
  function info1(about_what: pchar):pchar;

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

var
  Form1: TForm1;

implementation

{$R *.dfm}
function info1(about_what: pchar):pchar;
var InfoFunktion: TInfoFunktion;
    Handle: THandle;
begin
  Handle:=LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'dll.dll'));
  if Handle <> 0 then begin
    @InfoFunktion := GetProcAddress(Handle, 'info');
    if @InfoFunktion <> nil then begin
      result := InfoFunktion(about_what);
    end;
    FreeLibrary(Handle);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var test:pchar;
begin
test:='test';
    showmessage(info1(@test));
end;

end.

dll:
Delphi-Quellcode:
library dll;



uses
  SysUtils,
  Classes;

{$R *.res}
function info(about_what: pchar):pchar; stdcall;
begin
  if about_what='testthen
  result := 'super1'
  else
  result:='super2';
end;

exports
  info;
begin
end.
edit: hmm und ich hatte heute schon ein paar av's
  Mit Zitat antworten Zitat