[C++] PCH creation Point

daemon777

Lt. Commander
Registriert
Dez. 2003
Beiträge
1.371
Ich muss euch leider mal wieder belästigen :D

Und zwar hatte ich vor mal meine erste dll zu schreiben. Allerdings habe ich eine Fehlermeldung bekommen mit der ich leider überhaupt nicht zurecht komme.

Code:
--------------------Konfiguration: test2 - Win32 Debug--------------------
Kompilierung läuft...
level.cpp
d:\proggen\test\dateien\test2\level.cpp(10) : error C2143: Syntaxfehler : Fehlendes ';' vor 'PCH creation point'
Fehler beim Ausführen von cl.exe.

test2.dll - 1 Fehler, 0 Warnung(en)

Der Quellcode ist bis jetzt noch nicht sonderlich aufregend:

Code:
  //Alle benötigten defines, Klassen und Sonstiges   //
 //  level.h                                       //
//-----------------------------------------------//

#ifndef LVL_LOAD

#define LVL_OK 1
#define LVL_FEHLER 2

#include <stdio.h>
#include <stdlib.h>

#endif

class LVLLoad
{
  public:
	LVLLoad();
	~LVLLoad();
}

// Ende von level.h


 // level.cpp -------//
// ---------------- //

#ifndef LVL_INCLUDE

#include "level.h"

#endif

// Der Konstruktor von LVLLOAD
LVLLoad::LVLLoad()
{
	
}

// Ende level.cpp

Ich bin mir sicher, dass ihr mir auch dieses Mal weiter helfen könnt :)

Danke schon mal für eure Antworten.
 
Das kleine Semikolon hab ich übersehen :D
Danke :)

Kann mir vielleicht noch jemand verraten wie ich die dll jetzt in einer exe laden kann ?
 
Mit LoadLibrary. Funktionen benutzen tust du mit GetProcAddress.

Oder du machst das Ding als .lib und packst sie statisch dazu.

Achso, Klassen lassen sich nicht (oder nur unter schweren Umwegen) exportieren. Sondern nur Funktionen, die entsprechend für den Export markiert sind. Üblicherweise irgendwelches declspec Zeug oder Linker Direktiven.
 
Hm ein Beispiel währ net schlecht ansonsten versteh ich die Hälfte nicht :D

Es muss keine Klasse sein hauptsache ich kann später aus ner Datei auslesen.
Ich hab die dll jetzt mal so geändert, dass ich nur noch eine Funktion namens LoadLVL(char * level ) habe und zusätzlich hab ich noch eine .def datei hinzugefügt mit diesem Inhalt:

Code:
LIBRARY   "LVLLoad.dll"
EXPORTS
   LoadLVL

Wie müsste dann der einfachste Weg aussehen, diese Funktion ausserhalb der dll zu nutzten ?

Ich hab jetzt mal so angefangen allerdings hab ich keine Ahnung was getprocaddress für einen Wert zurück gibt bzw wie ich mit diesem arbeiten kann:

Code:
	HINSTANCE level;
	level = LoadLibrary("LVLLoad.dll");
	GetProcAddress(level, "LoadLVL");
 
LoadLVL ist aber eine Klasse und keine Funktion ;) Das geht alles nicht so einfach. Ich habe mal irgendwo in der MSDN Code gesehen, der auch Klassen über eine DLL exportieren kann, aber das war nicht nachahmungswürdig.

GetProcAddress gibt einen Funktionszeiger zurück, der in den entsprechenden Typ der Funktion gecastet werden muss.


/// Beispielfunktion, die einen int bekommt und einen int zurückgibt.
typedef int (* LoadLevel)(int);


LoadLevel loadLevel = reinterpret_cast<LoadLevel>( GetProcAdress( hInstance, "LoadLevel"));

....

int i = loadLevel( 5);




Edit:
Code ist nur aus dem Kopf... keine Garantie für korrekte Syntax ^^

Edit2:
Du kannst zwar die Klasse nicht direkt exportieren, aber du könntest eine Factory-Funktion bereitstellen, die ein entsprechendes Objekt erzeugt und einen Zeiger darauf zurückgibt. Entsprechend müsste dann noch eine Funktion zum Zerstören her.
 
Zuletzt bearbeitet:
Zurück
Oben