004
02.05.2006, 15:27 Uhr
RHBaum
|
1.
Zitat: |
In diesem Source Code gibt es eine Funktion, die von der externen DLL aufgerufen wird (_declspec dllexport).
|
wenn die externe Funktion pointer auf von dir implementierte funktionen haelt, um die bei bedarf aufzurufen, sinds hoechstwahrscheinlich doch callbacks ^^ Naja, theorethisch, die frage ist, ob deine (aus dem abgewandelten sourcecode) implementierte funktion direkt mit der externen Dll kommuniziert oder uebers hauptprogramm geht ^^ Denk mal geht nur uebers hauptprogramm, also deine dll brauch die anderen externen dlls nich anziehen oder ? (waere ne saubere loesung) Aber das sind wirklich nur begriffe um die wir diskutieren ^^
erste Version die du schreibst ist die klassische c implementation ^^ zweite version ist ne an C++ angenaeherte version ...
Iss eigentlich ne Prinzipielle Stilfrage ... wenn du deine Dll mit plain C implementieren willst, also nur nen C-Compiler vorrraussetzt, (unabhaengig davon ob selber nen c++ compiler verwendest oder nich, die meisten uebersetzen dir auch C) dann ist version 1 soweiso klar.
Wenn du aber die vorteile von C++ verwenden willst, und soweiso auf klassen baust ... dann ne verbesserte version von variante 2.
Verbessert ?
1. member funktionen an strukts: ? uebersetzt jeder [b]C++[b/] compiler, klar, aber nur aus faulheit struct statt class zu verwenden um sich den zugriffsmodifizierer zu sparen ??? structs nimmt man um plain C Datentypen zusammenzubauen ... falls die teil ner schnittstelle sind das nen C Compiler mit klarkommt, und um den Nutzer in C++ zu signalsieren, dass da nur reine Daten hinterstecken ... sobald ne logic und ne kapselung dahinnersteckt -> class (nen c-compiler kaem eh ned klar damit).
2. extern struct MeinStruct;
warum extern ?
deine Klasse schoen in ner getrennten .h und .cpp bauen ... irgendwo hasst du doch die cpp datei, die deine exportierten funktionen definiert .... die kaann doch bei version 2 nimmer C kompatibel sein, da sie eh memberaufrufe enthaelt ...
also nen
meineDll.cpp // was weiss ich fuern namen ?
C++: |
#include MeinClass.h // wir brauchen MeinClass
MeinClass gMeinClass; // ne globale instanz in deiner Impl ....
void MeineFunktion(int Param1, int Param2) { DWORD dwErgebnis, dwWert1; ... gMeinClass.SchreibeWert(Addresse, dwErgebnis); // Schreiben gMeinClass.LeseWert(Addresse, &dwWert1); // Lesen
}
// hier auch noch alle deine anderen Impl's .... der schnittstelle ...
|
Das extern braeuchtest nur, wenn Du Deine Implementationen aus der .h Datei ueber mehrere Cpp dateien verteilst ... nur wenn die in allen deinen verteilten cpp dateien brauchst, musst eine cpp datei festlegen wo deine globale variable definierst, oder du legst noch mal ne extra cpp datei fuer an ....
Ciao .. Dieser Post wurde am 02.05.2006 um 15:31 Uhr von RHBaum editiert. |