Thema: Delphi Dlls benutzen

Einzelnen Beitrag anzeigen

mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#1

Dlls benutzen

  Alt 2. Apr 2006, 11:50
Hallo,
ich habe heute angefangen eine eigne DLL zu schreiben sie sieht im moment genau so aus:
Delphi-Quellcode:
library myStringListDll;


uses
  SysUtils,Classes,dialogs;

{$R *.res}
procedure GibtNachricht_Aus(Str:Pchar); external 'myStringListDll.dllindex 1;

type
  TTest = class
  private
  public
    procedure GibtNachricht_Aus(str:Pchar);
  end;


procedure TTest.GibtNachricht_Aus;
begin
  ShowMessage(Str);
end;



exports
  GibtNachricht_Aus;
begin
end.
ich habe mir verschiende tutorials angesehen und das grundgerüst von meiner DLL davon abzuleiten.
Das beispiel mit der Classe habe ich in einem DelphiForum gefunden(weiß aber nicht mehr ob hier oder im DF)
mein ziel ist es eine eigne TStringList mit erweiterten funktionen zu entwicklen alles auch kein problem

ich versuche jetzt diese funktion wie folgt einzubinden(beispiel aus einem DLL tutor)
Delphi-Quellcode:
unit udll;

interface

uses windows,dialogs,SysUtils;

type
  PDRGibtNachrichtaus = procedure(Str:Pchar);
  
procedure LoadDll;
procedure GibtnachrichtAus(Test:PChar);cdecl;

var
  Nachricht:PDRGibtNachrichtaus = nil;
  
implementation

Function WhatIfNoEntry: Integer;
begin
  ShowMessage('Fehler');
  Halt;
end;

procedure LoadDll;
var
  lib:THandle;
begin
  lib := LoadLibrary('D:\Daten\eigene\delphi\dlls\myStringList\dll\myStringListDll.dll');

  case lib = 0 of
    TRUE: begin
      @Nachricht := @whatifnoentry;
      messagebox(0, 'DLL kann nicht geladen werde', nil, 0);
    end;
  else begin
    @Nachricht := GetProcAddress(lib, 'GibtnachrichtAus');

    if not Assigned(Nachricht) then
      @Nachricht := @whatifnoentry;
  end;
  end;
end;

procedure GibtnachrichtAus(Test:PChar);
begin
  Nachricht(test);
end;

end.
Im Hauptform rufe ich dann nur noch Load auf ein gibtNachRichtAus doch leider wird nur die Function
whatifnoentry weil so vermute ich bei @Nachricht := GetProcAddress(lib, 'GibtnachrichtAus'); irgenwas schiefläuft.

Kann mir jemand sagen was ich falsch mache ?
mein ziel ist es eine eigne klasse in ein DLL zu packen - eigentlich nicht weiter schwirig trotzdem habe ich probleme damit - leider -

Vielen dank im voraus für eure Hilfe
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat