Pfad zur DLL angeben....
-
Bei LoadLibrary hab ich nur das Problem das ich es nicht hinbekomme auf meine Klasse zu zugreifen.
Ok, auf die Klasse schon nur nicht auf Elemente in der Klasse.
Du kennst nicht reinzufällig ein Tutorial dafür.

Bis jetzt hab ich es nur über
#pragma comment(lib,hinbekommen, sonst würde ich ja ja über LoadLibrary gehen.
-
Also über die GUI gehts bei MSVC++ 2003 mit Extras-Optionen->Projects->VC++-Verzeichnisse...
-
Muss ich da auf was achten, weil wenn ich da den Pfad zur DLL eintrage passiert nix, das Prog. mault beim ausführen immer noch rum das es keine DLL findet.
Danke für deine Antwort!
-
Da trägt man IMHO auch keine Dll's ein (sondern eben Verzeichnisse für Includes und Libs). Ein Dll-KLassen-Export geht (ganz einfach) so
:class __declspec(dllexport) CFoo { // ... };
-
Mach ich...
class __declspec(dllexport) CFoo { // ... };... nur ich bekomme keine Instance der Klasse in meinem Programm zum laufen.
Ich muss zu meiner Verteidigung sagen, das ich hauptsächlich in Linux code...
Wenn du mir da vielleicht mal nen kurzes Bsp. geben könntest, wäre ich dir dankbar... ich verzweifle langsam an den DLLs
-
Hm... Bin verwirrt und weiß gar nicht mehr, was setcookie jetzt eigentlich will...
setcookie schrieb:
Ich habe mir eine DLL gebastelt und soweit geht auch alles, nun wollte ich die DLL in ein Programm einbinden, bekomme den Compiler aber nicht dazu die DLL da zu suchen wo ich das will.
[...]
Wenn die DllWithAlClass.dll in selben Verz. wie das Programm ist, geht alles, nur sobald ich die DLL in das Verz. DLL verschiebe findet er die DLL nicht mehr.Wenn ich dich richtig verstehe kann dein Programm zur Laufzeit die DLL nicht laden, wenn sie in einem Unterverzeichnis liegt, ja? (
)
-
Sorry war ein langer Tag.
Am liebsten würde ich die DLL zur Laufzeit laden.
So nun bestand das Problem darin das ich wenn ich über LoadLibrary die DLL einbinde konnte ich zwar einen Instanz der Klasse erzeugen nur auf kein Element der Klasse zugreifen.
Aus dem Grund habe ich über "pragma" die DLL eingebunden, da ist aber das Problem das ich den Pfad nicht wirklich angeben kann.
So nun war die Frage ob jemand mir an einem kurzen Bsp. zeigen wie ich entweder VC++ dazu überrede wenn ich über pragma ein die DLL einbinde meinen Pfad zu nehmen, oder (besser) wie ich auf meine Klassen Elemente zugreifen kann wenn ich die DLL über LoadLibrary einbinde.
Nochmal sorry, aber ich bin momentn echt abgespult!
-
ES GEHT !!!!
Oh man und die Lösung war soooo nah!!!!
Ich schreib Morgen wie, nur jetzt bin ich zu fertig mit der Welt!
-
Ok, hier wie Gestern versprochen meine Lösung.
Fehler im Quelltext sind möglich, da ich es jetzt aus dem Kopf wieder gegeben habe.
Sollte es bei jemand nicht gehen, einfach melden, ich versuche dann zu helfen.
MyClass.h
class VSocketClientController{ public: virtual void setVar1(int value) = 0; virtual void setVar2(int value) = 0; virtual int getResult(void) = 0; }; class MyClass : public VMyClass{ public: MyClass (void); ~MyClass (void); void setVar1(int value); void setVar2(int value); int getResult(void); private: int var1 int var2 };MyClass.cpp
MyClass::MyClass(void){ } MyClass::~MyClass(void){ } void MyClss::setVar1(int value){ var1 = value; } void MyClss::setVar2(int value){ var2 = value; } int MyClss::getResult(void){ return (var1 + var2); }mainDll.cpp
#include "MyClass.h" #include "MyClass.cpp" #ifdef __cplusplus #define DLLDIR extern "C" __declspec (dllexport) #else #define DLLDIR __declspec (dllexport) #endif BOOL WINAPI DllMain(HANDLE hModule,DWORD dwFunction,LPVOID lpNot) { return true; } DLLDIR void *getClassInstanc(){ return (void *)(new MyClass); }mainApp.cpp
#include "MyClass.h" HINSTANCE classDll = LoadLibrary("dll/myClass.dll"); typedef void *(*FunctionGetClassInstance)(void); FunctionGetClassInstance getClassInstanc= (FunctionGetClassInstance)GetProcAddress(classDll,"getClassInstanc"); int main(int argc, char *argv[]){ MyClass *myClass = NULL; myClass = (MyClass *)(getClassInstanc()); myClass->setVar1(1); myClass->setVar2(2); printf(">>> %i\n",myClass->getResult()); }
-
Gut zu wissen, hätte nicht gewusst wie man das macht
