000
24.04.2008, 11:32 Uhr
Lev1332
|
Hey.
Ich wollte meine classe in eine DLL auslagern. Hab auch etwas im Netz gefunden und dachte es wäre sehr einfach. Da hab ich wohl falsch gedacht.
Hier ist mein DLL Code.
main.c
Code: |
#include <windows.h>
#include "InDLL.h"
#ifdef __cplusplus // If used by C++ code, extern "C" { // we need to export the C interface #endif
// a sample exported function void CLASSINDLL_CLASS_DECL __cdecl msgbox(const LPCSTR sometext) { MessageBoxA(0, sometext, "DLL Message", MB_OK | MB_ICONINFORMATION); }
#include <stdio.h> #include <string>
using namespace std;
// Ein File Objekt wird erzeugt das zum schreiben des Log-Files verwendet wird. FILE * pLogFile;
class CLASSINDLL_CLASS_DECL log_creator { public:
log_creator() { // Classen-Funktion zum öffnen des Log-Files wird aufgerufen open_log(); }
~log_creator() { // Classen-Funktion zum Schließen des Log-Files wird aufgerufen. close_log(); }
void log(char* ctext) { /* Ein einfacher Text wird hier mit Datum und Uhrzeit in den Log geschrieben.
Als übergabe wert kann nur ein einfacher char Variablen Text verwendet werden. Hier kann der Text einfach direkt eingegeben werden. */ char buffer [80]; time_t rawtime; time ( &rawtime ); struct tm * timeinfo;
timeinfo = localtime ( &rawtime ); strftime (buffer,80,"%c",timeinfo); fprintf (pLogFile, "%s\t %s\n",buffer,ctext); }
void log(string &ctext) { /* Ein Text wird mit Datum und Uhrzeit in den Log geschrieben.
Hier wird eine String Variable verwendet die Vorher mit verschiedenen Programm Variablen gefülllt worden ist. Die Variable muss zuvor im Programm erzeugt und gefüllt worden sein, und kann nur als Variable Übergeben werden. */ char buffer[80]=""; char buffer2[1024]=""; int length; time_t rawtime; time ( &rawtime ); struct tm * timeinfo;
timeinfo = localtime ( &rawtime ); strftime (buffer,80,"%c",timeinfo); length=ctext.copy(buffer2,ctext.size()); buffer2[length]='\0'; fprintf (pLogFile, "%s\t %s\n",buffer,buffer2); }
protected:
void open_log(char* cfile="log.txt") { /* Log-File wird geöffnet. Wird keine spezielle Datei angegeben wird automatisch "log.txt" verwendet. Anschließend wir eine zeile in den Log geschrieben der den Anfang des aktuellen Log markiert. */ pLogFile = fopen (cfile,"a"); fprintf (pLogFile,"--- Neuer Log!!! ---\n\n"); }
void close_log(void) { /* Log-File wird geschlossen. Vorher wird noch eine Abschlußzeile in das Log geschrieben, die das Ende des aktuellen Log markiert, und abstandszeilen für den nächsten Log geschaffen. */ fprintf (pLogFile,"\n--- Log Ende!!! ---\n\n\n"); fclose (pLogFile); }
};
#ifdef __cplusplus } #endif
|
InDLL.h
Code: |
// InDLL.h: interface for the CInDLL class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_INDLL_H__179A79AA_4C1A_11D2_B67C_006008AC62A9__INCLUDED_) #define AFX_INDLL_H__179A79AA_4C1A_11D2_B67C_006008AC62A9__INCLUDED_
#if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000
#include "ClassInDLL.h"
#include <string.h>
class CLASSINDLL_CLASS_DECL log_creator { public: log_creator(); virtual ~log_creator();
void log(char* ctext); void log(string &ctext);
protected:
void open_log(char* cfile="log.txt"); void close_log(void);
};
#endif // !defined(AFX_INDLL_H__179A79AA_4C1A_11D2_B67C_006008AC62A9__INCLUDED_)
|
ClassInDLL.h
Code: |
#ifndef ClassInDLL_H #define ClassInDLL_H
#ifdef BUILD_DLL #define CLASSINDLL_CLASS_DECL __declspec(dllexport) #else #define CLASSINDLL_CLASS_DECL __declspec(dllimport) #endif
#endif // ClassInDLL_H
|
Error: InDLL.h line 16 syntax error befor "log_creator"
Genau so mehr oder weniger war es im Netz beschrieben. Hab es halt nur an meine klasse angepasst.
Ich benutze MinGW mit Code::Blocks. |