Ergebnis 1 bis 7 von 7
  1. #1
    Gesperrt
    Registriert seit
    09.02.2012
    Beiträge
    11

    Standard [DELPHI] DLL + Thread Problem

    Ich habe mal wieder ein Problem, also auf ein neues

    Und zwar möchte ich in einer DLL einen Thread starten.
    Das funktioniert aber komischerweiße nicht.
    Die .exe, die die DLL ladet stürtzt dann einfach ab.
    Wenn ich ein
    Code:
    EndThread(0);
    in die DLLMain mache, funktioniert die DLL zwar, aber die .exe hört einfach auf zu arbeiten.

    Ich benutze BeginThread. Mit CreateThread habe ich es auch versucht, da habe ich das gleiche Problem.

    Hoffe ihr versteht wie ich das meine, und könnt mir weiter helfen.
    Falls euch die Informationen nicht reichen, bitte sagen

    Danke im Vorraus !

  2. #2

    Registriert seit
    17.06.2009
    Beiträge
    559

    Standard AW: [DELPHI] DLL + Thread Problem

    Ohne Code kann man da nur raten.
    System.IsMultiThread gesetzt? Fehlende Synchronisierung? ...

  3. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Rüdiger (16.05.2012)

  4. #3
    Gesperrt
    Registriert seit
    09.02.2012
    Beiträge
    11

    Standard AW: [DELPHI] DLL + Thread Problem

    Danke schonmal für deine Hilfe.
    Code:
    IsMultiThread := True;
    Das habe ich, aber was meinst du mit fehlender Synchronisierung?

    (Ich editier gleich den Code hier rein)

    ---------- Post added at 00:36 ---------- Previous post was at 00:22 ----------

    So hier die Codes:

    DLL
    Code:
    library test;
    
    uses
      SysUtils,
      Windows,
      Dialogs;
    
    {$R *.res}
    
    function tThread(p: Pointer): Integer;
    begin
    
    while True do
    begin
      ShowMessage('Endlosschleife soll bleiben...');
    end;
    
    end;
    
    function StartPlugin(sParam: PChar): PChar; stdcall;
    Var
      Id:DWORD;
    begin
    BeginThread(nil,0,@tThread,nil,0,id);
    
    EndThread(0); // Ohne das kackt die exe sofort nach dem starten der Threads ab.
    end;
    
    exports
      StartPlugin;
    
    Begin
      IsMultiThread := True;
    
    end.
    EXE
    Code:
    program bin;
    
    uses
      SysUtils, Windows;
    
    type
      TRealFunction = function(sParam: PChar): PChar; stdcall;
    
    function LoadDLL(DllName: PChar; Einstieg: PChar; sParam: PChar): string;
    var
      RealFunction: TRealFunction;
      Handle: THandle;
    begin
      Handle := LoadLibrary(DllName);
      if Handle <> 0 then begin
        @RealFunction := GetProcAddress(Handle, Einstieg);
        if @RealFunction <> nil then begin
          result := PChar(RealFunction(sParam));
        end;
        FreeLibrary(Handle);
      end;
    end;
    
    Var
      sString: String;
    begin
    
    // sString wird eig. ausgelesen
    sString := 'lal';
    
      while True do
      begin
        sleep(5000);
    
        if sString = 'lal' then
          LoadDLL(PAnsiChar(GetCurrentDir + '\test.dll'),'StartPlugin',PAnsiChar('übergabe-string'));
    
        // hier immer wieder ein command wiederholen
        // allerdings passiert nichts mehr, nachdem die dll geladen wird
      end;
    
    end.

  5. #4

    Registriert seit
    17.06.2009
    Beiträge
    559

    Standard AW: [DELPHI] DLL + Thread Problem

    In StartPlugin musst Du auf den Thread warten und in einem Thread darfst Du keine VCL Funktionen aufrufen, da diese nicht threadsafe ist.

    Also so ungefähr:
    Code:
    function tThread(p: Pointer): Integer;
    begin
    
    while True do
    begin
      MessageBox(0, 'test', 'bla', 0);
      //ShowMessage('Endlosschleife soll bleiben...');
    end;
    
    end;
    
    function StartPlugin(sParam: PChar): PChar; export;
    Var
      Id:DWORD;
    begin
      waitforsingleobject(BeginThread(nil,0,@tThread,nil,0,id),infinite);
    end;

  6. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Rüdiger (16.05.2012)

  7. #5
    Gesperrt
    Registriert seit
    09.02.2012
    Beiträge
    11

    Standard AW: [DELPHI] DLL + Thread Problem

    Hmmm...
    Der Thread bleibt offen, und das Programm stürtzt nicht ab. Das ist schonmal gut.
    Aber die exe macht in der while Schleife einfach nicht weiter...
    Sonst noch eine Idee?

  8. #6
    Gesperrt
    Registriert seit
    09.02.2012
    Beiträge
    11

    Standard AW: [DELPHI] DLL + Thread Problem

    Okay, habe das Problem gelöst.
    Ich muss in der EXE mit zwei Threads arbeiten, damit die EXE normal weiterläuft.

    Danke inout für deine Hilfe.

  9. #7

    Registriert seit
    17.06.2009
    Beiträge
    559

    Standard AW: [DELPHI] DLL + Thread Problem

    Stimmt, so wie es jetzt ist macht es auch nicht viel Sinn

    Es liegt wohl daran, dass Du die DLL lädst, die Funktion ausführst und die DLL sofort wieder freigibst. Kommentiere in der EXE das FreeLibrary mal aus, dann wird es funktionieren.

    Du solltest also das Handle mit LoadLibrary im Hauptprogramm erstellen, der Funktion LoadDLL übergeben, die dann nur die DLL Funktion startet und danach die DLL im Hauptprogramm entladen.

    Edit: Das WaitForSingleObject musst Du dann natürlich wieder rausnehmen.
    Geändert von inout (16.05.2012 um 15:14 Uhr)

Ähnliche Themen

  1. [DELPHI] ByteArray Problem
    Von Rüdiger im Forum Delphi
    Antworten: 2
    Letzter Beitrag: 14.05.2012, 22:08
  2. Problem beim Installieren von Delphi
    Von X.êr.rôR.X im Forum .NET Sprachen - Techniken
    Antworten: 2
    Letzter Beitrag: 02.02.2009, 13:05
  3. Antworten: 15
    Letzter Beitrag: 19.03.2008, 10:08
  4. [Delphi] Delphi 2005 Personal-Edition legal
    Von K1ngC0bra im Forum Delphi
    Antworten: 4
    Letzter Beitrag: 07.10.2007, 15:42
  5. [Delphi] Problem mit selbtsgecodeter Stub
    Von Steiger_mp im Forum Delphi
    Antworten: 5
    Letzter Beitrag: 07.10.2007, 14:43

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •