URL: https://www.overclockers.at/coding-stuff/cbuilder_6_c_automation_plugin_45538/page_1 - zur Vollversion wechseln!
der sollzustand:
markiert man das plugin im lonmaker als zu registrieren, schickt dieser ein LcaCommandRegister an das dispatch interface der proxyklasse welches in der SendCommand ( ... ... ... ) method verarbeitet wird
das plugin trägt sich in die LNS datenbank ein, die proxyklasse wird - da nicht mehr gebraucht - zerstört, das hauptfenster (in dem fall ein splash screen) wird ebenfalls zerstört und das programm endet
startet man dann das plugin dann zur benutzung werden nach zerstörung des proxy objects die programmfenster nicht geschlossen und die anwendung läuft weiter
die zerstörung des proxy objects ist allerdings notwendig da sonst der lonmaker das "initialize ... blabla" kaffeetassen-fenster nicht schließt
der istzustand:
unter visual studio 6 alles schon erledigt, allerdings steigen wir jetzt auch in der angelegenheit auf borland um, weil mit der mfc etwas aufwändigere oberflächen (keine 0815 dialogfenster) ein endloser krampf sind
unter MFC ist das problem so gelöst:
ich hab den destructor der proxy klasse modifiziert sodass das main window nur zerstört wird wenn eine variable true gesetzt wurde - was bei der registrierung geschieht
hier der code dazu:
CFrameworkDlgAutoProxy::~CFrameworkDlgAutoProxy()
{
// To terminate the application when all objects created with
// with automation, the destructor calls AfxOleUnlockApp.
// Among other things, this will destroy the main dialog
// close system, network and server
LNS::close_server ();
if (reg)
{
if (m_pDialog != NULL)
m_pDialog->m_pAutoProxy = NULL;
AfxOleUnlockApp();
}
}
so, nun hab ich allerdings das leid mitn borland das er beinhart und unerbittlich meine applikation abwürgt
destructor ist keiner extra definiert. bau ich selbst einen ein wird er ignoriert
ringding meine hoffnungen ruhen auf deinen schultern 
Puh mal sehen, was sich machen lässt 
Ich hab leider C++ Builder noch nie verwendet, weil er mir irgendwie unsympathisch ist. Nur leider muss ich mittlerweile auch feststellen, dass komplizierte UIs mit C++B einfach leichter machbar sind.
Ich schau mal rein 
Von wo aus wird denn das Proxy-Objekt zerstört?
@VC im implenentationsfile der proxyklasse - nachdem die sendcommand method returned wird der destructor aufgerufen
@BCB sehr wahrscheinlich ebenfalls nach der sendcommand method, allerdings weiss ich ab da nicht mehr wo und wie
Na machst du's selber oder macht's der Framework irgendwie?
das framework irgendwie
würd ichs selber machen könnt ichs ja kontrolliern, aber so passiert irgendwas im hintergrund
Kannst nicht irgendwo einen Breakpoint setzen und dann im Call Stack schauen, woher's aufgerufen wird?
PS Hab grad angefangen, mim C++Builder herumzuspielen. Das eben gesagte gestaltet sich eher tricky, weil er im Gegensatz zum MSVC den VCL Sourcecode nicht zum Debuggen heranzieht. Vielleicht kann ich's ja irgendwo einstellen, muss noch probieren.
daran hab ich auch schon gedacht, aber leider ....
seltsam is, wenn ich dem constructor TDlgProxyImpl () eine msg box verpasse, erscheint sie
editiere ich einen destructor (~TDlgProxyImpl()) dazu, wird der ignoriert
Hmm, das ist schon sehr seltsam. Ein Destructor darf gar nicht ignoriert werden, das wär ja noch schöner 
Jetzt hab ich meinem Automationsobjekt in der automatisch generierten TLB eine Methode dazugegeben, aber wie krieg ich die jetzt ins Impl rein?
EDIT: Oh, sie ist schon da, nur der Classbrowser zeigt sie mir intelligenterweise nicht an 
dann liegt es eigentlich nahe das das object garnicht zerstört wird und er gleich zur programm-terminierung übergeht 
Ah, wenn man bei Project Options | Linker "Use debug libraries" anklickt, dann sieht man immerhin einen vernünftigen Call Stack.
Hmm, wenn ich die Source Files von der VCL hätte, was ich nicht habe, obwohl ich's bei der Installation angekreuzt hab, dann könnte ich jetzt sogar was sinnvolles sehen. Sind die bei der Trial Version nicht dabei? Kann ich mir kaum vorstellen.
bei der trial is alles dabei ! (ich benutz die enterprise trial)
wenn die zeit abläuft -> uhr zurückstellen -> starten -> uhr vorstellen -> geld sparen 
das ~170mb file entpackt zu ~700mb, und das is afair eine hübsche vollversion zum freien und sogar legalen download
jaja, aber such mal nach *.pas
da kommen bei mir grad mal 4 files, und es sollten mindestens ein paar hundert sein, denn die vcl ist in pascal geschrieben.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026