AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Aus DLL auf Prgramm zugreifen

Ein Thema von F.W. · begonnen am 27. Aug 2004 · letzter Beitrag vom 22. Okt 2006
Antwort Antwort
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#1

Re: Aus DLL auf Prgramm zugreifen

  Alt 1. Okt 2004, 21:20
Hallo nochmal!

Ich überarbeite gerade ein Programm komplett. Und wollte die Variante mit der DLL benutzen, da dieser Teil oft in Updates drinstecken wird und da macht sich das mit DLLs einfach praktischer.

Dieses Mal ist es wie im Beispiel, ein RichEdit in den Text eingefügt werden soll. Aber der Text steht nicht in einem String, sondern in einem Stream.
Es wird also das RichEdit und der Stream übergeben (und das Hauptformular, weil geprüft wird, ob es sichtbar ist). Die DLL soll den String aus dem Stream lesen und ihn in das RichEdit einfügen, ans Formatieren denke ich momentan noch nicht.

Das Problem liegt jetzt darin, dass er nach der 1. zeile einfach aufhört die Anweisungen der Procedure abzuarbeiten:
Delphi-Quellcode:
(***************Ausschnitt aus der DLL***************)
  procedure GetMsg(RE: TRichEdit; MainForm: TForm; St: TStream); export; stdcall;

procedure GetMsg(RE: TRichEdit; MainForm: TForm; St: TStream);
var
 I: Integer;
 I64: Int64;
 Kennung: Char;
 S: String;
begin
 St.Seek(0, soFromBeginning); //<- Die Zeile macht er immer ohne Probleme
 St.ReadBuffer(Kennung, 1); //<- Diese Zeile macht er nicht mehr, aber er zeigt keinen Fehler an!
 if Kennung = 'Tthen begin
    St.ReadBuffer(I, SizeOf(I));
    St.ReadBuffer(S[1], I);
    RE.Lines.Add(S);
    Melden(MainForm);

 end else if Kennung = 'Cthen begin
    St.ReadBuffer(I, SizeOf(I));
  { ... }
 end else if Kennung = 'Bthen begin
    St.ReadBuffer(I64, SizeOf(I64));
  { ... }
 end;
end;

//Und so wird alles aufgerufen:
(***************Ausschnitt aus dem programm***************)
  TGetMsg = procedure(RE: TRichEdit; MainForm: TForm; St: TStream);

  procedure GetMsg(RE: TRichEdit; MainForm: TForm; St: TStream); stdcall;

procedure GetMsg(RE: TRichEdit; MainForm: TForm; St: TStream);
var
 GM: TGetMsg;
 H: Cardinal;
begin
 if not FileExists(Main.Pfad+'DLL_Messaging.dll') then begin
    Beep;
    Exit;
 end;

 H := LoadLibrary(PChar(Main.Pfad+'DLL_Messaging.dll'));
 if H <> 0 then begin
    @GM := GetProcAddress(H, 'GetMsg');
    if @GM <> NIL then begin
       GM(RE, MainForm, St);
    end;
    FreeLibrary(H);
 end;
end;

procedure TMain.ServerExecute(AThread: TIdPeerThread);
var
 I: integer;
 St: TStream;
begin
 I := AThread.Connection.ReadInteger;
 if I > 0 then begin
    St := TMemoryStream.Create;
    try
      AThread.Connection.ReadStream(St, I);
      GetMsg(Main.RE, Main, St);
    finally
      St.Free;
    end;
 end;
end;
IMHO ist das wieder so ein Problem, wo man alles machen kann was man will, aber es nicht zum laufen bekommt, den ganzen Quelltext in ein neues Projekt kopieren... Würde nicht funktionieren. Nur wenn man sich eine Stunde hinsetzen würde und alles nochmal abtippen würde, dann würde wahrscheinlich alles gehn!

Bitte helft mir, ich bin ratlos!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz