Library erst später benutzen!! Library erst benutzen wenn ich es will
-
hallo,
ich möchte mittels Corona ein BMP-Bild zu einem PNG-Bild convertieren -
das funktioniert auch prima!allerdings soll es so sein:
- mein programm läuft
- ich packe irgendwann später die corona.dll in den ordner meines programms
und klicke auf "convertieren"das geht jetzt allerdings nicht da ich die Library so einbinden muss:
#include "corona.h" using namespace corona; ...und wenn die corona.dll nicht sofort bei programmstart vorhanden ist
kommt halt eine fehlermeldung :-|wie kann ich das so machen das die Library erst geladen wird, "wenn ich es will" ?
-
weiß zwar nicht, was das mit dem unterforum zu tun hat, kenn auchb nciht corona.
aber: wenn du die dll (also windows) dynamisch einbinden willst, darfst du erstmal nicht die passende lib mit linken. dann musst du mittels LoadLibrary die dll laden und dann mit getprocaddress funktionspointer aus der dll ziehenüber diese pointer kannst du dann die funktinen aufrufen
-
ja das habe ich schon versucht:
hDll = LoadLibrary("corona.dll"); if(hDll==0) MessageBox(NULL,"Fehler Load","error",0); test = (PINSTALLHOOK) GetProcAddress(hDll,"OpenImage"); if(test==0) MessageBox(NULL,"Fehler GetAddress","error",0);OpenImage wird allerdings nicht gefunden.
Wie bekomme ich die ProcAdresse herraus?
ich möchte eig. das hier machen:corona::Image* image = corona::OpenImage(src); corona::SaveImage(dst,FF_PNG,image);danke schonmal!
-
Dieser Thread wurde von Moderator/in GPC aus dem Forum Andere GUIs - Qt, GTK+, wxWidgets in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
HI,
ein Blick mit dem Dependency Walker zeigt mir dass die Funktion in der Dll _CorOpenImage heißt.
Ein Blick in den Header zeigt mir:inline Image* OpenImage( const char* filename, PixelFormat pixel_format = PF_DONTCARE, FileFormat file_format = FF_AUTODETECT) { return hidden::CorConvertImage( hidden::CorOpenImage(filename, file_format), pixel_format); }Also bräuchtest du mindestens noch nen Funktionszeiger auf _CorConvertImage und die Funktionzeiger müssen auch anders aussehen,weil pixel_format ja an CorConvertImage weitergeleitet wird.
Was spricht denn dagegen die Lib/Dll einfach so zu benutzen wie es vorgesehen ist?
Mit deinem Vorhaben bekommst du wahrscheinlich nur Ärger.Gruß Spacelord
-
Das wird so nicht klappen, du kannst Klassen nicht so laden. Was du aber machen kannst ist eine Wrapper-DLL zu schreiben die dir ein kompatibles (also nur extern "C" funktionen) interface anbietet.
-
@Spacelord
wenn ich es normal mache ich die dll-datei schon beim ersten starten.
ich möchte sie allerdings erst später in den ordner meiner anwendung
kopieren und benutzen.naja gibt es da noch eine möglichkeit?
-
Babelduo (net eingeloggt) schrieb:
@Spacelord
wenn ich es normal mache ich die dll-datei schon beim ersten starten.Ist was?
-
@lolz:
Ich hatte das nur kurz überflogen aber in der Dll sind nur nen paar C Funktionen.
hidden ist nen Namespace in dem die extern C Funktionen versteckt sind.
Bullshit ist es trotzdem.@Babelduo:
Ich hab immer noch keinen plausiblen Grund gehört, was was denn nun dagegen spricht die Dll schon beim Programmstart zu laden.
Schau dir mal diesen Artikel hier an:
http://www.microsoft.com/msj/1298/hood/hood1298.aspxGruß Spacelord
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Du kannst auch einfach die DLL als "Delay-Loading" angeben, dann wird sie erst geladen, wenn Du die erste Funktion davon aufrufst...
http://msdn2.microsoft.com/yx9zd12s
-
Jochen Kalmbach schrieb:
Du kannst auch einfach die DLL als "Delay-Loading" angeben, dann wird sie erst geladen, wenn Du die erste Funktion davon aufrufst...
http://msdn2.microsoft.com/yx9zd12sYep,genau darum geht es in dem MSJ Artikel den ich verlinkt habe
.Gruß Spacelord
-
wow danke es scheint zu funktionieren!
genau das was ich wollte