CBuilder 6, C++ / Automation, plugin

Seite 1 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/cbuilder_6_c_automation_plugin_45538/page_1 - zur Vollversion wechseln!


FMFlash schrieb am 22.08.2002 um 14:04

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 ;)


Ringding schrieb am 22.08.2002 um 14:40

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 :)


Ringding schrieb am 22.08.2002 um 14:48

Von wo aus wird denn das Proxy-Objekt zerstört?


FMFlash schrieb am 22.08.2002 um 15:12

@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


Ringding schrieb am 22.08.2002 um 15:16

Na machst du's selber oder macht's der Framework irgendwie?


FMFlash schrieb am 22.08.2002 um 15:19

das framework irgendwie :(
würd ichs selber machen könnt ichs ja kontrolliern, aber so passiert irgendwas im hintergrund


Ringding schrieb am 22.08.2002 um 15:37

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.


FMFlash schrieb am 22.08.2002 um 15:44

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


Ringding schrieb am 22.08.2002 um 15:45

Hmm, das ist schon sehr seltsam. Ein Destructor darf gar nicht ignoriert werden, das wär ja noch schöner :)


Ringding schrieb am 22.08.2002 um 15:46

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 :)


FMFlash schrieb am 22.08.2002 um 15:51

dann liegt es eigentlich nahe das das object garnicht zerstört wird und er gleich zur programm-terminierung übergeht :bash:


Ringding schrieb am 22.08.2002 um 15:54

Ah, wenn man bei Project Options | Linker "Use debug libraries" anklickt, dann sieht man immerhin einen vernünftigen Call Stack.


Ringding schrieb am 22.08.2002 um 15:57

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.


FMFlash schrieb am 22.08.2002 um 16:01

bei der trial is alles dabei ! (ich benutz die enterprise trial)
wenn die zeit abläuft -> uhr zurückstellen -> starten -> uhr vorstellen -> geld sparen :p

das ~170mb file entpackt zu ~700mb, und das is afair eine hübsche vollversion zum freien und sogar legalen download


Ringding schrieb am 22.08.2002 um 16:05

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