AGB  ·  Datenschutz  ·  Impressum  







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

DLL - Form Problem

Ein Thema von spacewolf · begonnen am 7. Sep 2006 · letzter Beitrag vom 8. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von spacewolf
spacewolf

Registriert seit: 24. Apr 2003
Ort: Magdeburg
218 Beiträge
 
Delphi 7 Professional
 
#1

DLL - Form Problem

  Alt 7. Sep 2006, 15:35
Moin hab grad probiert eine Form folgendermaßen in eine DLL zu quetschen:

Delphi-Quellcode:
function KarteiAdmin(parent: Pointer;nr:integer;
                     curUserID:integer): boolean; stdcall;
begin
 try
   AdminKartei(parent,patnr);
 finally
 end;
end;

function AdminKartei(parent: Pointer;
                     nr:integer):boolean;
begin
  if Assigned(parent) then
  begin
    ShowMessage('geht los');
    frmKarteiAdmin := TfrmKarteiAdmin.Create(nil);
    try
      frmKarteiAdmin.SetParent(parent);
      frmKarteiAdmin.ibtr.DefaultDatabase := db;
      frmKarteiAdmin.SetPatnr(patnr);
      frmKarteiAdmin.ShowModal;
    finally
      frmKarteiAdmin.Free;
    end;
  end
end;

procedure TfrmKarteiAdmin.FormCreate(Sender: TObject);
var
  pc: PChar;
begin
  // Modul anzeigen
  GetMem(pc, MAX_PATH);
  if Assigned(pc) then
    try
      ZeroMemory(pc, MAX_PATH);
      GetModuleFileName(hInstance, pc, MAX_PATH);
      showmessage(string(pc));
    finally
      FreeMem(pc);
    end
  else
    showmessage('Konnte Modulnamen nicht ermitteln.');
end;


das ganze lass ich dann so wieder aufrufen:

Delphi-Quellcode:
function CheckKartei:boolean; //addieren(zahl1, zahl2: integer): integer;
var KarteiAdmin: TKarteiAdmin;
    Handle: THandle;
begin
  Handle:=LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'daKarteiAdmin.dll'));

  if Handle <> 0 then begin
    @KarteiAdmin := GetProcAddress(Handle, 'KarteiAdmin');
    if @KarteiAdmin <> nil
    then result:=KarteiAdmin(nil,1,0);

    try FreeLibrary(Handle); except end;
  end;
end;
Mein Problem ist das beim Aufruf das Form nicht angezeigt wird und beim FreeLibrary gibts ne Exception...

Kann mir jemand sagen wo das Problem liegt ?
Andreas Göllner
("`-''-/").___..--''"`-._
`6_ 6 ) `-. ( ).`-.__.`)
"Ich kann Dir nur die Tür zeigen, durchgehen musst Du ganz allein."
Wer ist die Tür? Jesus!
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#2

Re: DLL - Form Problem

  Alt 7. Sep 2006, 15:37
probier mal diese stelle
  frmKarteiAdmin := TfrmKarteiAdmin.Create(nil); durch
  frmKarteiAdmin := TfrmKarteiAdmin.Create(Self); zu tauschen.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: DLL - Form Problem

  Alt 7. Sep 2006, 15:45
Wie ist KarteiAdmin definiert?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von spacewolf
spacewolf

Registriert seit: 24. Apr 2003
Ort: Magdeburg
218 Beiträge
 
Delphi 7 Professional
 
#4

Re: DLL - Form Problem

  Alt 7. Sep 2006, 15:57
>> Wie ist KarteiAdmin definiert?
Delphi-Quellcode:
TKarteiAdmin = function(parent: Pointer;nr:integer;
                        curUserID:integer): boolean; stdcall;
Andreas Göllner
("`-''-/").___..--''"`-._
`6_ 6 ) `-. ( ).`-.__.`)
"Ich kann Dir nur die Tür zeigen, durchgehen musst Du ganz allein."
Wer ist die Tür? Jesus!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: DLL - Form Problem

  Alt 7. Sep 2006, 16:11
Verwendest Du Laufzeitpackages?
Falls nein:

frmKarteiAdmin.SetParent(parent); ist nicht erlaubt, da (zum 1000. mal) ohne Laufzeitpackages du zwei unabhänige Klassenbibliotheken in der DLL und der Exe hast und TObject in DLL <> TObject Exe und jeder Vergleich mit xxx as TKlasse und xxx is TKlasse fehlschlägt.
Sollte aber erst m.E. Krachen wenn du kein nil als Zeiger übergibst.

Irgendjemand (Forensuche bemühen) hat mal eine Lösung gepostet die Halbwegs funktionieren sollte.

Also probiers mal mit Laufzeitpackages.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von spacewolf
spacewolf

Registriert seit: 24. Apr 2003
Ort: Magdeburg
218 Beiträge
 
Delphi 7 Professional
 
#6

Re: DLL - Form Problem

  Alt 7. Sep 2006, 16:12
Hallöchen fwsp,

Delphi-Quellcode:
function AdminKartei(parent: Pointer;
                     nr:integer):boolean;
hat keinen Parent... also würde self nix gehen...
Andreas Göllner
("`-''-/").___..--''"`-._
`6_ 6 ) `-. ( ).`-.__.`)
"Ich kann Dir nur die Tür zeigen, durchgehen musst Du ganz allein."
Wer ist die Tür? Jesus!
  Mit Zitat antworten Zitat
Benutzerbild von spacewolf
spacewolf

Registriert seit: 24. Apr 2003
Ort: Magdeburg
218 Beiträge
 
Delphi 7 Professional
 
#7

Hallo Bernhard,

  Alt 7. Sep 2006, 16:19
Hallo Bernhard,

Laufzeitpackages ? Nö.

Also das:

"frmKarteiAdmin.SetParent(parent);" kracht eigendlich nicht - habs aber mal auskommentiert... und ändert gar nichts...

Und im Tutorial von Assarbad ist dat so beschrieben...

http://www.michael-puff.de/Developer...l_tutorial.pdf

Seite 16 und 17...

>>Also probiers mal mit Laufzeitpackages.

naja, wollt grad herausfinden wie es mit DLLs geht
Andreas Göllner
("`-''-/").___..--''"`-._
`6_ 6 ) `-. ( ).`-.__.`)
"Ich kann Dir nur die Tür zeigen, durchgehen musst Du ganz allein."
Wer ist die Tür? Jesus!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Hallo Bernhard,

  Alt 7. Sep 2006, 16:48
Zitat von spacewolf:
>>Also probiers mal mit Laufzeitpackages.

naja, wollt grad herausfinden wie es mit DLLs geht
Das eine schließt das andere nicht aus. Du kannst auch es als DLL belasen. U.u. mußt Du ShareMem noch einbinden wenns eine DLL bleibt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: DLL - Form Problem

  Alt 7. Sep 2006, 17:05
Hallo,

an welcher Stelle knallt es denn ?
eine DLL kann man auch debuggen...
Setz mal nen Breakpoint auf frmKarteiAdmin := TfrmKarteiAdmin.Create(nil);
und trage als Start-Parameter deine Exe ein.

Auf jeden Fall würde ich diese globale Form-Variable löschen,
spätestens, wenn zwei Programme auf die DLL zugreifen,
knallt es wieder.
Delphi-Quellcode:

function AdminKartei(nr:integer):boolean;
var
  frmKarteiAdmin : TfrmKarteiAdmin.
begin
  frmKarteiAdmin := TfrmKarteiAdmin.Create(nil);
  try
    frmKarteiAdmin.ibtr.DefaultDatabase := db;
    frmKarteiAdmin.SetPatnr(patnr);
    frmKarteiAdmin.ShowModal;
  finally
    frmKarteiAdmin.Free;
  end
end;
Was hier interessant ist, ist das
frmKarteiAdmin.ibtr.DefaultDatabase := db;
Was ist db ?

Bei Dlls + Interbase solltest du nachmal nachlesen
(CloneHandle oder sowas ähnliches.)

Ausserdem meckert dein Compiler, dass der Rückgabewert unbestimmt ist ..


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von spacewolf
spacewolf

Registriert seit: 24. Apr 2003
Ort: Magdeburg
218 Beiträge
 
Delphi 7 Professional
 
#10

jeht jetzt...

  Alt 7. Sep 2006, 18:48
Hi Hoika,

>> an welcher Stelle knallt es denn ?
jetzt nur noch beim entladen der DLL

>>eine DLL kann man auch debuggen...
DANKE... das war der Tip den ich brauchte
Ja DLLs debuggen... darauf muss man erst ma kommen...

>>Auf jeden Fall würde ich diese globale Form-Variable löschen,
>>spätestens, wenn zwei Programme auf die DLL zugreifen,
>>knallt es wieder.
welche globale Form-Variable meinst Du denn jetzt ?

Delphi-Quellcode:
function AdminKartei(parent: Pointer;
                     db:TIBDatabase;patnr:integer):boolean;
var
  frmKarteiAdmin : TfrmKarteiAdmin;
begin
  //if Assigned(parent) then // is nich ... geht nich....
  begin
    frmKarteiAdmin := TfrmKarteiAdmin.Create(nil);
    try
      frmKarteiAdmin.SetParent(parent); // is wieder drin und crasht nicht...
      frmKarteiAdmin.ibtr.DefaultDatabase := db; // Datenbank zuweisen
      frmKarteiAdmin.SetPatnr(patnr);
      frmKarteiAdmin.ShowModal;
    finally
      frmKarteiAdmin.Free;
    end;
  end
end;
>>Was ist db ?
ist TIBDatabase... hatte ich veressen im Bsp. rauzunehmen...

>>Bei Dlls + Interbase solltest du nachmal nachlesen
>>(CloneHandle oder sowas ähnliches.)
Wo kann man darüber was nachlesen ?

>>Ausserdem meckert dein Compiler, dass der Rückgabewert unbestimmt ist ..
stimmt werde noch n result zurückgeben lassen...
Andreas Göllner
("`-''-/").___..--''"`-._
`6_ 6 ) `-. ( ).`-.__.`)
"Ich kann Dir nur die Tür zeigen, durchgehen musst Du ganz allein."
Wer ist die Tür? Jesus!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz