Ann: vbRichClient4

31/07/2011 - 15:21 von Schmidt | Report spam
Hallo Mitstreiter,

habe fertig...

Download (7z-komprimiert, ca. 5MB):
http://www.datenhaus.de/Downloads/vbRC4Deploy.7z

Leider noch ohne Demos (und ohne Doku) - die folgen
in Kürze nach (zunàchst die Demos...;-)) ... aber die
COM-Interfaces sind jetzt "soweit gut durch-entwickelt" -
und die Binàrkompatibilitàt auf vbRichClient4.dll
ist angeschaltet.

Bei künftigen Updates wàre dann also nur ein Austausch
der Binaries nötig - und keine Nachregistrierung.

Auf Euren Entwicklermaschinen am besten in einen separaten
Folder entpacken (ich benutze hier z.B. C:\RC4\) - und
danach die einzige "COM-Abhàngigkeit" (vbRichClient4.dll)
mittels RegSvr32 registrieren (auf Vista und Win7 d'ran denken,
dass RegSvr32 im Admin-Mode aufgerufen werden möchte).

Ok, im 5MB-Paket sind etwa 3.6MB dem (spàter in Euren
eigenen Deployments optionalen) \WebKitCairo\-SubFolder
geschuldet - die eigentlichen Hauptkomponenten (nur die
werden benötigt, solange man WebKit nicht in seine Apps
einbindet) sind die 3 Dlls:
DirectCOM.dll
vb_cairo_sqlite.dll (latest cairo from trunk, sqlite-version 3.7.7.1)
vbRichClient4.dll
Diese 3 Dlls immer zusammen in einem Folder belassen
(ebenso wie die "Positionierung" und Benamung des
optionalen WebKitCairo-SubFolders).

Diese 3 Haupt-Dlls schlagen LZMA-komprimiert etwa mit
1.5MB zu Buche (Inno-Setup z.B. bietet, soweit ich weiss,
ebenfalls eine LZMA-PackOption für Eure eigenen Setups an).
In Euren Setup-Scripten vielleicht noch darauf achten,
dass die beiden (nicht zu registrierenden) Dlls:
DirectCOM.dll
vb_cairo_sqlite.dll
vor der Registrierung der COM-Dll (vbRichClient4)
physisch bereits im Setup-Zielfolder exisitieren -
die richtige "Copy-Reihenfolge" ist also wichtig,
sonst schlàgt der Registrierungs-Vorgang von
vbRichClient4.dll fehl.

Wie "abwàrtskompatibel" ist das Ganze?

vbRichClient4 integriert (neben einer Menge
an neu hinzugekommenen Klassen) - die
Klassen aus dhRichClient3 und dhCairo.

Für Anwendungen, die bisher ausschließlich die dhRichClient3-
Referenz eingebunden hatten (die meisten davon werden so
im Groben wahrscheinlich die SQLite-DBEngine, und
vielleicht cCollection und cSortedDictionary - oder
vielleicht die XML-Klassen benutzt haben...)
sollte es ausreichen, einfach die dhRichClient3-Projekt-
Referenz auf vbRichClient4 umzuschalten - und dann
neu "durchzukompilieren". Diese "erprobten" RC3-Klassen
finden sich also calling-kompatibel im RC4 wieder.

Für Anwendungen, die dhCairo.dll benutzen gelten ein
paar wichtige Änderungen/Hinweise...

Die meisten werden noch nicht die Widget-Engine von
dhCairo benutzt haben, sondern "nur" die "Raw-Cairo"
Drawing-Funktionalitàt.
Diese Drawing-Klassen sind im RC4 soweit ebenfalls
identisch benamt - und calling-kompatibel - ein Umschalten
der dhCairo-Projektreferenz auf vbRichClient4 reicht
in 99% der Fàlle also ebenfalls aus.
Was im RC4 anders ist, ist zum einen die Instanziierung der
"Cairo-Einstiegs-Klasse" cCairo (die üblicherweise
global, Projektweit in einer *.bas-Modul-Variable
bereitgestellt wird - werden sollte):
Die ist nun nicht mehr "direkt erzeugbar" wie z.B. mit
Public Cairo As cCairo
Set Cairo = New cCairo

sondern nur noch indirekt (da "Public Not Creatable") per
cConstructor:
Public New_c As cConstructor, Cairo As cCairo
Set New_c = New cConstructor '<- direkt erzeugbar
Set Cairo = New_c.Cairo '<- nur noch indirekt instanziierbar

Den cConstructor zu benutzen (in der in meinen Demos so
benamten 'New_c' Variable) empfiehlt sich in jedem Fall,
(anstelle von VBs normalem = New cIgendwas), da
man spàter dann nur die New_c Variable regfree mit
dem cConstructor besetzen muss (an einer kleinen Stelle
Code sozusagen), um seine Applikation regfree lauffàhig
zu machen.

Ok, dies wurde eingeführt, um in der RC4-Dll selbst bessere
Kontrolle (interne Information) darüber zu erhalten,
was "rausgereicht wurde" und was nicht.

Weiterhin wurde die in dhCairo.dll noch vorhandene
"Cleanup-Automatik" (wichtig beim App-Shutdown)
deaktiviert, da oft nicht "spàt genug aufgerufen".

Der RC4 hat deshalb (auf Kosten von geringfügig mehr
Code auf Eurer Seite) eine manuelle Cleanup-Funktion.

Erreichbar ebenfalls über den (New_c) cConstructor:
Aufzurufen beim Shutdown Eurer Anwendungen
"so spàt wie möglich"...
Bewàhrt hat sich bei mir folgendes:

Zu platzieren z.B. in der als letztes bei Euch "sterbenden"
VB6-Form:
Private Sub Form_Terminate()
If Forms.Count = 0 Then New_c.CleanupRichClientDll
End Sub

Wer nicht sicher ist, welche Form als letztes in seiner
Anwendung stirbt, sollte die 3 Zeilen Code auch in
seine weiteren Forms einfügen - der Forms.Count = 0
check stellt hierbei sicher, dass der Cleanup-Call
wirklich erst dann wirksam wird, wenn "alle Forms"
(und somit dann auch alle RC4-ObjektInstanzen,
die zur App-Laufzeit angeworfen wurden) dann
auch wirklich "weg sind".

Also bitte ans diese jetzt nötigen "Extra-Aufràum-Calls"
(wie oben gerade gezeigt) denken, falls Ihr bisher dhCairo.dll
benutzt habt.

Anwendungen bisher nur dhRichClient3-Objekte (also
"nicht-visuelles Zeugs") benutzt haben, müssen diesen
Cleanup-Call nicht aufrufen - prophylaktisches "schonmal
reintun" schadet allerdings nicht.

Der Cleanup-Call ist wie gesagt wichtig, bei allen Anwendungen,
die mit den "visuellen Output erzeugenden" Klassen von
RC4 interagieren (Raw-Cairo-Drawing, Widgets, WebKit,
SVG usw.).

Hintergrund sind Dll-interne Caches (z.B. für Fonts und die
globale ImageList) - und die benötigen (über den Cleanup-Call)
ein sauberes Entladen beim App-Shutdown (so spàt wie möglich
wie gesagt - und nachdem möglichst alle in die App rausgereichten
RC4-Objekte bereits weggeràumt wurden).

Ok - das war's erstmal - Demos folgen in Kürze nach -
die Adaption an Wolgangs letztes Web-Example làuft
hier bereits - muss nur noch ein wenig aufràumen.

Wer sich einen schnellen Überblick über die neuen
Klassen verschaffen möchte, der kann ja schonmal
mit dem VB-ObjektBrowser reinschauen.

Viel Spaß damit...

Olaf
 

Lesen sie die antworten

#1 W. Wolf
31/07/2011 - 19:49 | Warnen spam
Hallo Olaf,

"Schmidt" schrieb im Newsbeitrag
news:j13lp1$gtr$
Hallo Mitstreiter,

habe fertig...




Glückwunsch! Ab morgen wird heiß gekocht.
Freue mich aufs testen. Alle Rückmeldungen vorerst hier?

Schönen Gruß
W. Wolf

Ähnliche fragen