Dlls Klassen
lima-city → Forum → Programmiersprachen → C/C++ und D
anwendung
aufruf
beitrag
dll
dynamisch zwecks
export
fehler
funktion
gruss
import
klasse
main
pack
parameter
problematik
sinnen
speziellen datei
stack
statische laden
verbergen
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das ist eigentlich einfach nur man muss halt dem Programm klar machen wie die Klasse aussieht, da man quasi nur die Funktion/Proceduren exportieren kann.
DLL Code:
(Das __stdcall kann wegbleiben da es nur eine Aufrufkonvention ist und regelt wie die Parameter auf dem Stack abgelegt werden)
#include <windows.h>
#define DllExport __declspec(dllexport)
DllExport class C
{
private:
int i;
public:
void __stdcall SetInt(int);
int __stdcall GetInt();
};
//--------------------
/*Nur wichtig f?r die DLL an sich aber nicht f?r die angesprochene Problematik*/
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
return 1;
}
/******************************************************************************/
void __stdcall C::SetInt(int var)
{
i = var;
}
//----------------------------------
int __stdcall C::GetInt()
{
return i;
}
(Und der Aufruf in einer Anwendung erfolgt so(Lib ganz klar mitlinken))
EXE Code:
(Erst mal musst du dem Programm klar machen wie die Klasse eigentlich ausschaut das kannst ?hnlich machen wie bei der DLL)
...
#define DllImport __declspec(dllimport)
DllImport class C
{
private:
int i;
public:
void __stdcall SetInt(int);
int __stdcall GetInt();
};
...
//der Aufruf der Funktion/Proceduren erfolgt wie gewohnt
C c;
c.SetInt(5);
c.GetInt(); //gibt 5 wieder
C *m_c = new C;
m_c->SetInt(9);
m_c->GetInt(); //gibt 9 wieder
delete m_c;
*EDIT* Musste was ?ndern da ich nen Fehler gemacht habe, war irgendwie geistig umnachtet.
Beitrag ge?ndert am 16.05.2006 17:52 von funkdoobiest -
gut danke aber wie kann man das ohne lib machen irgendwie mit so einer speziellen datei wo man EXPORT und IMPORT angibt wei? aber nicht mehr wie die hei?t.
-
Hmmm es gibt nur noch eine weitere M?glichkeit aber die macht wenig Sinn. Es gibt halt das statische laden und das dynamische (ohne ne lib). Statische hab ich dir ja nun erkl?rt mit declspec das andere w?re mit LoadLibrary
Sagen wir mal du hast ne Funktion mit dem Namen Hallo der R?ckgabewert ist vom Typ int und besitzt selber 2 Atribute (char *, int)
Da g?be es halt die M?glichkeit das so zu machen
//----------------------------------------
typedef int (Funktion)(char *, int);
Funktion *f1;
HINSTANCE hiDll;
int main(int argc, char* argv[])
{
hiDll = LoadLibrary("gruss.dll");
f1 = (Funktion*)GetProcAddress(hiDll,"Hallo");
f1("Guten Tag", 1);
FreeLibrary(hiDll);
return 0;
}
Nur is das eher Unzweckm??ig f?r dein Vorhaben. Au?erdem frag ich mich was du gegen ne lib hast diese sagt dem Linker ja nur welche Funktion sich in der DLL verbergen. Trotzdem bleibt das ganze dynamisch zwecks DLL updaten, etc. Also was spricht dagegen.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage