| 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 aufrufen?! 	  | Code: |  	  | HRESULT (* ceLog)(char*); ceLog = (HRESULT (*)(char*))(GetProcAddress(m_dllLog,"CreateNewLog"));
 | 
 _________________
 -+- SchNeiDi74 -+-
 -+- www.creative-games.de -+-
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Christian Rousselle Site Admin
 
  
 Alter: 49
 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: 49
 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: 37
 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: 37
 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 |  | 
	
		|  | 
	
		|  |