Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » programm/binary aus datenbank laden und ausführen ?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.04.2010, 17:26 Uhr
~global
Gast


programm/binary aus datenbank laden und ausführen ?

hallo,

ich komm mit meinem (mySQL)datenbank projekt langsam in die heise phase des beta-tests.
das ganze ist ne anwendung zur messdaten erfassung, wo mehrere clients in eine datenbank(DB) schreiben. das klappt soweit auch alles.
da jetzt natürlich so einiges an fehlern auftaucht wollte ich ne möglichkeit finden alle clienten schnell updaten zu können. die zentrale speicherung des programms auf dem server scheidet aus, da nicht alle clienten auf die serverlaufwerke zugreifen dürfen.

habe mir das erst so gedacht:
ich speichere die exe als binary in der datenbank, und schreibe einen kleinen loader, der das aus der DB ausliest und local speichert und anschliessend startet.

schöner wäre allerdings das ganze nur als dll in die DB zu schreiben, der loader überprüft dann die version der vorhandenen dll, und der in der DB, bei ungleichheit lädt er die dann und startet das programm.

soweit die theorie... leider hab ich nicht wirklich einen plan wie ich das machen soll. (die binärdaten aus der DB zu lesen, und diese zu speichern ist nicht das problem)
... hat jemand mal ne kettensäge ? hier stehen halt so viele bäume rum, dass man den wald nicht sieht...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.04.2010, 17:45 Uhr
0xdeadbeef
Gott
(Operator)


Naja, eine DLL kann Funktionen exportieren, wie sie lustig ist. Wenn die DLL beispielsweise eine Funktion

C++:
extern "C" __declspec(dllexport) int run(int argc, char *argv[]);


exportiert, kann das Hauptprogramm rund so aussehen:

C++:
int main(int argc, char *argv[]) {
  LPCTSTR dllname = _T("deine.dll");
  update_dll_if_necessary(dllname); // Pseudocode

  HINSTANCE dll;
  int (*real_main)(int, char *argv[]);


  if((dll       = LoadLibrary   (dllname))        != NULL &&
     (real_main = GetProcAddress(dll, _T("run"))) != NULL) {
    int result = real_main(argc, argv);
    FreeLibrary(dll);
    return result;
  } else {
    // Linkerfehler
  }
}


der ganze eigentliche Programmcode befände sich innerhalb der DLL, und das Hauptprogramm lockt die vorhandene DLL nicht, bevor sie upgedatet wurde. Allerdings ist es natürlich Jacke wie Hose, ob du jetzt eine .dll runterlädst und dynamisch linkst oder eine .exe runterlädst und per execv() o.ä. startest.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 10.04.2010 um 17:50 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.04.2010, 18:28 Uhr
~global
Gast



Zitat von 0xdeadbeef:
Allerdings ist es natürlich Jacke wie Hose, ob du jetzt eine .dll runterlädst und dynamisch linkst oder eine .exe runterlädst und per execv() o.ä. startest.

stimmt allerdings, mit der exe ist es wohl auch erst mal die einfachere version da brauch ich erstmal nicht sooo viel umstellen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: