Autor Beitrag
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Mo 20.01.03 12:02 
Hallo zusamm´n...

folgendes:
hab ein riesengroßes Progg geschrieben, der Source-Code in jenem zur DLL-Einbindung lautet wie folgt

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
interface

uses 
// diverse units, die ich fürs hauptprogg brauche

type
TForm1 = class(TForm)
// ... ganz ganz viele typen halt ... u.a.:
procedure InitDaten; stdcall; //<--- hier Fehlermeldung, siehe unten

implementation

uses
// .. n paar formulare die ich brauche

const
dlltoload = 'ex_init.dll';

procedure InitDaten; external dlltoload;

// ... Rest vom Programm ....

InitDaten;

// ... noch mehr irrelevanter Code


soviel zum Hauptprogramm, jetzt die DLL.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
library ex_init;

uses
   SysUtils,
   Classes,
   main in 'main.pas' // mein Hauptprogramm

procedure InitDaten;
begin
with Form1 do begin
// hier weise ich ein paar DBEdit-Felder die entsprechenden Felder 
// einer SQL-DB zu
end;
end;

Exports
   InitDaten index 1;

begin
end.


fertig. so siehts aus. doch wenn ich jetzt das Hauptprogramm ausführe, springt er oben zu der Procedure und sagt mir :

Unsatisfied forward or external declaration TForm1.InitDaten

Wenn ich die DLL in Delphi ausführe, erhalte ich ne "simple" Acces Violation at adress .... in module ex_init.dll!

Was mach ich falsch? Ich hab mir nu schon 2 Tut´s runtergeladen und in 3 Foren nach ähnlichen Fehlern gesucht, aber geholfen hats noch nicht....
:( bin also für jeden Hinweis zur Ergreifung des Übeltäters dankbar...


mfg
kiwicht
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 20.01.03 12:08 
Geh mal auf meine Seite und lies dir das DLL Tutorial von Assarbad durch. Das sollte so einiges klären.

www.luckie-online.de...als/dll_tutorial.pdf Achtung PDF-Datei!
kiwicht Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Mo 20.01.03 12:35 
das hab ich schon.... aufgrund diesem Tut und den Beispiel-Dateien hab ich ja mein Programm geschrieben... und es geeeeht nicht... :(



(und ich muss dazusagen, das das tut fachlich wohl einzigartig umfangreich ist, aber für einen newby wie mich total überladen daherkommt. da werden *.pas-Dateien ausgelagert ohne Ende, es werden gleichzeitig auf drei oder vier verschiedene Arten die funktionen mit über von gleich zig variablen importiert... für mich alles ziemlich verwirrend... aber ich will mich ja nicht beschweren, dafür isses ja umsonst... :) :) )
Sven
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314


D6 Ent, K3 Pro (patched)
BeitragVerfasst: Mo 20.01.03 14:16 
Ich bin mir nicht ganz sicher. Kann es vielleicht daran liegen, daß Du in Deiner Dll ein Formular aus Deinem Hauptprogramm einbindest/aufrufst?

_________________
MDK 9.1, Kernel 2.4.21, KDE 3.1 Kylix 3 Pro (patched), nutze aber auch Windows
kiwicht Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Mo 20.01.03 14:20 
nun ja, schon.
wie gesagt, ich weise in der DLL den DBEdit-Felder aus meinem Hauptformular die Datenfelder einer DB zu.
In der DLL steht aber dann with Form1 do begin, und er sagt ja auch nix, soll heissen die DLL kann ich ja erstmal bedenkenlos ausführen...

mittlerweile versuch ich ja jetzt alles dynamisch einzubinden, komm da aber auch nicht weiter.... und hab jetzt schon das dritte tut durchgearbeitet...

kennt ihr das gefühl, wenn man sich von delphi n bissel verscheissert fühlt, weil egal was man macht, es ist falsch? :roll: :roll:
Sven
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314


D6 Ent, K3 Pro (patched)
BeitragVerfasst: Mo 20.01.03 15:02 
Du schreibst folgendes:
Zitat:
Wenn ich die DLL in Delphi ausführe, erhalte ich ne "simple" Acces Violation at adress .... in module ex_init.dll!


des weiteren hast Du in der Dll folgenden Code:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
uses 
   SysUtils, 
   Classes, 
   main in 'main.pas' // mein Hauptprogramm 

procedure InitDaten; 
begin 
  with Form1 do begin 
  // hier weise ich ein paar DBEdit-Felder die entsprechenden Felder 
  // einer SQL-DB zu 
  end; 
end;


Ich meine: Woher kennt InitDaten was zur Laufzeit Form1 ist? Deine Form1 aus der DLL hat zur Laufzeit mit Deiner Form1 aus dem Hauptprogramm überhaupt nichts zu tun. Ich sehe das so, das Du entweder die ganze Form1 einschließlich Bearbeitung usw. in die Dll verlagerst; mit aufrufen und schließen, oder Du füllst die DBEdit-Felder in Deinem Hauptprogramm.

_________________
MDK 9.1, Kernel 2.4.21, KDE 3.1 Kylix 3 Pro (patched), nutze aber auch Windows
kiwicht Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Mo 20.01.03 15:30 
aber ich hab doch unter USES
auch die main.pas angegeben... und bezüglich der form1 sagt er auch nix mehr, das scheint also erstmal zu funzen.

welche frage mich aber im moment viel mehr beschäftigt:
bringen mir denn dll´s in meinem fall überhaupt was? weil ja eigentlich jede größere Procedure in meinem Programm auf eine Komponente auf dem Formular zugreift... ich denke also mit ner DLL komm ich da auch nicht weiter, ohne einen großen Aufwand zu betreiben.... das Progg is nämlich im Grund schon fertig, mir mit 1,5 mb nur etwas zu groß.. :roll:
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 20.01.03 15:38 
Und was bringt es das in DLL's auszulagern? Exe+DLL's = 1,5 MB Ich sehe da keinen Gewinn oder Sinn drin.
kiwicht Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Mo 20.01.03 19:13 
na die dll kann ich doch wieder "entladen"...

oder kennst du noch ne andere möglichkeit? mir wär alles recht, hauptsache nicht 1,5 mb exe.... :(
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 20.01.03 21:08 
UPX, aber das wäre dann die Holzhammer-Methode.
Sven
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314


D6 Ent, K3 Pro (patched)
BeitragVerfasst: Di 21.01.03 07:23 
kiwicht hat folgendes geschrieben:
aber ich hab doch unter USES
auch die main.pas angegeben... und bezüglich der form1 sagt er auch nix mehr, das scheint also erstmal zu funzen.


Nein!!! Nur weil Du unter USES die main.pas angibst, heißt das noch lange nicht, daß Deine Dll das Formular zur Laufzeit anspricht. Es heißt nur, daß Dein Hauptprogramm und Deine DLL, jeweils zur Laufzeit ein Formular erzeugen (können) welches denselben Namen trägt. Wenn Du zur Laufzeit auf Dein Hauptformular zugreifen willst, dann übergibst Du am besten das Fensterhandle an die Prozedur. Dann kannst Du über eine Iteration der Editfelder diese dann füllen. Die genauen Befehle dafür sind mir allerdings nicht geläufig, da ich solch merkwürdige Konstrukte zum füllen von Feldern nicht verwende.
Falls Du es Dir überlegst, und das füllen der Felder ins Hauptprogramm verlegst, dann wird Deine EXE nicht um >=500MB aufgebläht, sondern nur um 10-20 KB.

Gruß Sven

_________________
MDK 9.1, Kernel 2.4.21, KDE 3.1 Kylix 3 Pro (patched), nutze aber auch Windows