c++ dll in vb und vc
-
Hallo!
Hab folgende test_dll - Datei erstellt:signed long _stdcall StdVar_Integer (signed short int ByValValue, signed short int *ByRefValue); BOOL WINAPI DllEntryPoint ( HINSTANCE hDLL, DWORD dwREASON, LPVOID Reserved ) { switch (dwREASON) { case DLL_PROCESS_ATTACH: { break; } case DLL_PROCESS_DETACH: { break; } } return TRUE; } signed long _stdcall StdVar_Byte (unsigned char ByValValue, char *ByRefValue) { ByValValue++; *ByRefValue = *ByRefValue + 2; return (ByValValue); }
und folgende .def - Datei:
LIBRARY test_dll CODE PRELOAD MOVEABLE DISCARDABLE DATA PRELOAD SINGLE EXPORTS StdVar_Byte @1
Dass heißt, ich kann diese Funktion jetzt in VB aufrufen können!
Doch wie mach ich das jetzt, dass ich dieselbe Funktion in VC verwenden kann?
Jemand ne Idee?
-
Doch wie mach ich das jetzt, dass ich dieselbe Funktion in VC verwenden kann?
Du inkludierst den Header mit dem Funktions-Prototypen und fügst die erzeugte Lib Deinem Projekt hinzu. Und nun rufst Du die Funktion ganz einfach auf.
-
Danke danke!
Hab heute nach längerem Suchen folgendes Zusammengebastelt:typedef double (__stdcall* AddOne)(double); AddOne lpAddOne; HINSTANCE gLibMyDLL = NULL; int main(int argc, char* argv[]) { double x=5; printf ("%f\n",x); gLibMyDLL = LoadLibrary("C_Function.DLL"); if (gLibMyDLL) { lpAddOne=(AddOne)GetProcAddress(gLibMyDLL, "AddOne"); if (lpAddOne) { printf ("%f\n",lpAddOne(x)); } } FreeLibrary(gLibMyDLL); return 0; }
War ziemlich mühsam, bis das jetzt endlich funktioniert hat.
@king: Doch was ist jetzt die bessere (schönere) Methode?
-
@king: Doch was ist jetzt die bessere (schönere) Methode?
Beide Methoden haben ihre Berechtigung. Wenn Dein Programm ohne diese Dll sowieso nicht funktioniert, würde ich meine Variante vorziehen. Wenn Du in die Richtung PlugIn gehst, ist Deine Methode einzusetzen.
-
danke