JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

LoadLibrary

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 12.04.2005, 12:02    Titel: LoadLibrary Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 12.04.2005, 12:19    Titel: Antworten mit Zitat

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 Wink

Kleiner Tipp:
createDevice (IDevice* output); Wink
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 12.04.2005, 13:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 12.04.2005, 13:10    Titel: Antworten mit Zitat

Nein, du sollst dir eine CreateKlasseUndGibEinenPointerAufEinObjektDerKlasse Funktion schreiben, die eine Objekt der Klasse erzeugt und einen Zeiger zurückgibt.

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 12.04.2005, 13:11    Titel: Antworten mit Zitat

Christian Rousselle
Erfasst.
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 12.04.2005, 13:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 12.04.2005, 14:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 12.04.2005, 14:15    Titel: Antworten mit Zitat

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. Smile
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 12.04.2005, 14:26    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 12.04.2005, 17:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 12.04.2005, 17:28    Titel: Antworten mit Zitat

so wird das idR. beim Interfacedesign gemacht.

Bestes Beispiel: COM
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 12.04.2005, 17:44    Titel: Antworten mit Zitat

Na gut, das ist im Moment noch fettes Neuland für mich Rolling Eyes

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum