AGB  ·  Datenschutz  ·  Impressum  







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

Einbinden einer DLL

Ein Thema von Killer · begonnen am 25. Apr 2004 · letzter Beitrag vom 26. Apr 2004
Antwort Antwort
Killer

Registriert seit: 11. Nov 2003
152 Beiträge
 
Delphi 6 Enterprise
 
#1

Einbinden einer DLL

  Alt 25. Apr 2004, 22:07
Hi hab mir bei meinem neuen Projekt ne DLL (in Delphi geschrieben) eingebunden, die dann aus der Anwendung statisch geladen wird. Es klappt auch fast, ich bekomm aber beim Start eine Exception der Klasse EPrivilege und zwar mit der Meldung "Privilegierte Anweisung".

Weiß irgendwer was das zu bedeuten hat???

Update:
Hab grad gegoogelt und das hier dazu gefunden:

$00DA - 218 - Priviligierte Instruktion
Typ: Schwerer Fehler

EPrivilege wird ausgelöst, wenn eine Anwendung versucht, eine Prozessoranweisung auszuführen, die in der gegenwärtigen Prozessor-Vorrangstufe nicht zulässig ist.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Einbinden einer DLL

  Alt 25. Apr 2004, 22:48
wenn du den code aus der dll mit in die hauptanwendung machst, funktionierts dann?? Ansonsten würd ich eifnach mal drauf tippen das in der dll was gemacht wird das nicht zulässig ist oder die aufrufkonvention nicht stimmt (stdcall etc...)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Killer

Registriert seit: 11. Nov 2003
152 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Einbinden einer DLL

  Alt 25. Apr 2004, 23:21
Jep wenn ich den Code in die Anwendung schreibe dann gehts auch. Ich hab den Code ursprünglich in der Anwendung gehabt und wollte ihn in die DLL auslagern.

Den Aufruf hab ich mit stdcall gemacht.
Also so: procedure GetTree(Tree: TTreeView); stdcall; external 'function.dll'
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Einbinden einer DLL

  Alt 25. Apr 2004, 23:42
probier mal obs geht wenn du mit sharemem arbeitest.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#5

Re: Einbinden einer DLL

  Alt 26. Apr 2004, 06:21
Wenn ich mich nicht irre musst du hinter dem "external 'function.dlll'" auch noch mit nameden Funktionsnamen angeben. UNd das mit ShareMem könnte auch stimmen. Statt mit TreeViews zu arbeiten solltest du lieber Pointer auf TreeViews übergeben.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Einbinden einer DLL

  Alt 26. Apr 2004, 08:16
Moin!

Zitat von Dax:
Wenn ich mich nicht irre musst du hinter dem "external 'function.dlll'" auch noch mit nameden Funktionsnamen angeben.
Nein, muss man nicht, wenn der Funktionsname gleich ist. Ansonsten hat man auch die Möglichkeit anstatt des Namens den Index der Funktion anzugeben.

Zitat von Dax:
UNd das mit ShareMem könnte auch stimmen.
Tut es auch. Die ShareMem muss immer eingebunden werden, wenn übergebene Werte oder auch Werte innerhalb von Klassen(instanzen) mit Strings arbeiten (ausser ShortStrings). Und dieses ist bei einem TTreeView eindeutig der Fall (jedes Element ab und einschliesslich TPersistent sogar).

Zitat von Dax:
Statt mit TreeViews zu arbeiten solltest du lieber Pointer auf TreeViews übergeben.
Das macht kein Unterschied und ist eigentlich schon fast doppelt gebastelt. Das ist wirklich egal in diesem Falle...

@Killer: Du hast die Funktion in deinem Projekt mit "stdcall;" Konvention definiert - aber hast du stdcall; auch bei der Funktion in der DLL selber auch angegeben????

MfG
Muetze1
  Mit Zitat antworten Zitat
Killer

Registriert seit: 11. Nov 2003
152 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: Einbinden einer DLL

  Alt 26. Apr 2004, 09:07
Ups da muss ich heute Abend mal nachschauen ob ich stdcall in der DLL angegeben habe.

Was mich noch ein wenig ärgert, ist dass die DLL mit 2 Funktionen schon 350kB Dateigröße hat. Irgendwie aber auch wieder verständlich, da ich 4 Units in die DLL eingebunden habe (bzw. muss)...ne Möglichkeit wär ja die DLL mit C zu schreiben, aber da weiß ich dann nich wie es mit dem TreeView geht...
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: Einbinden einer DLL

  Alt 26. Apr 2004, 09:10
Moin!

Zitat von Killer:
...ne Möglichkeit wär ja die DLL mit C zu schreiben, aber da weiß ich dann nich wie es mit dem TreeView geht...
Wieso? Nimm einen C++Builder.

MfG
Muetze1
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Einbinden einer DLL

  Alt 26. Apr 2004, 09:40
Zitat von Killer:
Was mich noch ein wenig ärgert, ist dass die DLL mit 2 Funktionen schon 350kB Dateigröße hat. Irgendwie aber auch wieder verständlich, da ich 4 Units in die DLL eingebunden habe (bzw. muss)...ne Möglichkeit wär ja die DLL mit C zu schreiben, aber da weiß ich dann nich wie es mit dem TreeView geht...
Wenn du Programmcode auslagern möchtest und nur von Delphi aus benutzen willst, dann sind
DLLs ungeeignet. Stattdessen musst du einfach ein Package erzeugen und alle Units, die
du auslagern möchtest "hineinstopfen".
Sowohl dein eigenes Package, als auch deine Anwendung müssen dann ihrerseits Packages
(VCL60, VCLX60, VCLDB60, ...) benützen; nur dann wird deine Anwendung und dein Package
wenig Speicherplatz benötigen.

In deinem Fall mit der DLL ist nichts gewonnen, denn den Programmcode der VCL befindet
doppelt in deiner Anwendung und in der DLL.
Ein weiterer Nachteil: eine neuere Anwendung könnte auf eine ältere Version deiner
DLL treffen und schon passen die Funktionsaufrufe nicht zusammen => Absturz.
Hier müsste man die Version der DLL überprüfen.
Andreas
  Mit Zitat antworten Zitat
Killer

Registriert seit: 11. Nov 2003
152 Beiträge
 
Delphi 6 Enterprise
 
#10

Re: Einbinden einer DLL

  Alt 26. Apr 2004, 14:52
@Muetze1:

Ich meinte eigentlich auch C++, mit dem Unterschied, dass ich den C++ Builder nicht besitze, aber Visual C++ schon.

shmia:

Hast auch wieder recht. Naja ich glaub ich lager das Zeugs lieber in Units aus
  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 13:59 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