Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 12.04.2005, 12:02 Titel: LoadLibrary |
|
|
Wenn ich mit LoadLibrary eine Dll lade, wie kann ich dann einen Zeiger auf eine Klasse bekommen. Mit einzelnen Funktionen krieg ich das ja hin, aber wie funktioniert das mit Klassen?
Hier ist wie ich die Dll lade:
CPP: | m_dllLog = LoadLibrary("dll/CELog.dll");
if(m_dllLog==NULL)
MessageBox(0,"Dll für Log konnte nicht geladen werden","Fehler",MB_OK);
HRESULT (* ceLog)(char*);
ceLog = (HRESULT (*)(char*))(GetProcAddress(m_dllLog,"CreateNewLog"));
if(ceLog==NULL)
MessageBox(0,"Mist","Mist",MB_OK);
if(FAILED(ceLog("Log.txt")))
MessageBox(0,"MÜLL","MÜLL",MB_OK); |
_________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 12.04.2005, 12:19 Titel: |
|
|
Gar nicht, DLLs sind für C ausgelegt und nicht für C++.
Du kannst also nur Funktionen aus der DLL laden und da solltest Du ansetzen
Kleiner Tipp:
createDevice (IDevice* output); _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 12.04.2005, 13:08 Titel: |
|
|
Mit anderen Worten, ich muss für jede Funktion die ich nutzen will extra Code: | HRESULT (* ceLog)(char*);
ceLog = (HRESULT (*)(char*))(GetProcAddress(m_dllLog,"CreateNewLog")); | aufrufen?! _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 12.04.2005, 13:10 Titel: |
|
|
Nein, du sollst dir eine CreateKlasseUndGibEinenPointerAufEinObjektDerKlasse Funktion schreiben, die eine Objekt der Klasse erzeugt und einen Zeiger zurückgibt.
Christian |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 12.04.2005, 13:54 Titel: |
|
|
Aeh ja, vom Verständnis her klar, aber wie mache ich das mit der Klasse und dem Pointer. Könnte ich da mal ein Beispiel für bekommen wie das aussehen muss? _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 12.04.2005, 14:10 Titel: |
|
|
Code: |
// in dem Modul/DLL
class X
{
// ...
};
X* CreateX(void) // Funktion, die Exportiert wird
{
X* x = new X;
return x;
}
void DeleteX(X* x)
{
if(x) delete x;
}
|
|
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 12.04.2005, 14:15 Titel: |
|
|
Christian Rousselle
Tipp:
Mach sowas:
bool CreateX (X* output)
Dort kannst du abfragen ob es überhaupt ein gültiges Objekt gibt!
Ruf ich deine z.B. so auf:
CreateX(); tja wohin zeigt dann der Speicher? Speicherleaks vorprogrammiert.
Und die Klassen sollten eine release-Methode haben. _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 12.04.2005, 14:26 Titel: |
|
|
Christian Rousselle hat Folgendes geschrieben: | Code: |
X* CreateX(void) // Funktion, die Exportiert wird
{
X* x = new X;
return x;
}
void DeleteX(X* x)
{
if(x) delete x;
}
|
|
muss ich dann nicht das dann eher so haben:
Code: |
extern "C"
{
__declspec(dllexport) X* CreateX(void) // Funktion, die Exportiert wird
{
X* x = new X;
return x;
}
}
|
oder hab ich da jetzt was komplett falsch verstanden?
Wie nutze ich das dann in dem Programmteil wo ich die dll lade? bzw. halt die anderen funktionen der klasse? _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 12.04.2005, 17:24 Titel: |
|
|
Frage am Rande, mit
CreateX(X* output);
geht das denn, dafür muss ich doch einen Pointer auf eine Objekt der Klasse anlegen, und kann ich das wenn die Klassendeklaration in der .dll stecken tut? _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 12.04.2005, 17:44 Titel: |
|
|
Na gut, das ist im Moment noch fettes Neuland für mich
Bin besser still^^ _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
|
|