Zapis klasy do zmiennej typu blob

0

Witam!
Wielokrotnie w swoich programach dochodzę do miejsca, w którym eleganckim rozwiązaniem byłoby zapisanie całej klasy do tablicy bazy danych. Innymi słowy chciałbym przechowywać formy (zawartość całej klasy) w polach blob tak aby użytkownik mógł wybrać żądaną formę z wyświetlonej listy. Sprawa z pewnością nie jest prosta bo nie wystarczy zapisanie adresu i offsetu formy , którą chciałbym tworzyć dynamicznie. Pewnie trzeba byłoby zapisać fragment pamięci, w której forma jest utworzona ale nie przychodzi mi do głowy żaden pomysł jak to uczynić.
Ogólny algorytm mógłby wyglądać tak:

  1. Mforma:=Tform.create..
  2. Adres:=get.address(Mforma)
  3. Offset:= get.offset(Adres,Mforma)
  4. blob:=read.from.memory(Adres,Offset)
  5. save.blob
    a teraz odtworzenie formy
  6. set.in.memory(read.blob, Adres,Offset)
    To co wyżej to tylko poglądowe rozwiązanie ale może ktoś mądrzejszy zna lub wie jak dokładnie rozwiązać ten problem?
0

http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Classes_TStream_WriteComponent.html
Jest odpowiednio ReadComponent
Zobacz w źródłach VCL jak to robi formatka czyta z resursów.

0

Witam ponownie.
Chyba niezbyt klarownie opisałem swój problem. Nie chodziło mi o zapisywanie do strumienia lub pliku komponentów umieszczonych na formie. Chodzi mi o zapisywanie do pliku lub strumienia czy w jakikolwiek inny sposób całej klasy, łącznie z procedurami, funkcjami i zdarzeniami. Inaczej mówiąc. Mam formatkę główną z rozwijaną listą menu, w której to liście znajdują się nazwy różnych formatek nie załadowanych razem z Exe-Kiem ale przechowywanych w rekordach (polach) bazy danych. Czyli całe klasy muszę zapisać do zmiennej typu blob aby przechowywać je w bazie. Nie znam takiego rozwiązania, które pozwoliłoby na dokonanie takiej sztuczki ale może ktoś już tego dokonał? To tak jak przechowywać klasy w DLL ale to rozwiązanie mnie satysfakcjonuje bo tu wymagana jest wiedza o ładowanych klasach na etapie implementacji a mnie potrzebne jest rozwiązanie na poziomie runtime bo nie wiem ile i jakie klasy będzie mógł użytkownik uruchomić. Będę wdzięczny za wszelkie wskazówki.

0

Biblioteka Indy posiada interpreter. Możesz ładować same kody w pascalu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1