![]() |
Einbinden einer DLL
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??? :roll: 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. |
Re: Einbinden einer DLL
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...)
|
Re: Einbinden einer DLL
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' |
Re: Einbinden einer DLL
probier mal obs geht wenn du mit sharemem arbeitest.
|
Re: Einbinden einer DLL
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.
|
Re: Einbinden einer DLL
Moin!
Zitat:
Zitat:
Zitat:
@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 |
Re: Einbinden einer DLL
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... :shock: |
Re: Einbinden einer DLL
Moin!
Zitat:
MfG Muetze1 |
Re: Einbinden einer DLL
Zitat:
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. |
Re: Einbinden einer DLL
@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 :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 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