"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

CBuilder 6, C++ / Automation, plugin

FMFlash 22.08.2002 - 14:04 1477 20
Posts

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
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

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
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

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Von wo aus wird denn das Proxy-Objekt zerstört?

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
@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

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Na machst du's selber oder macht's der Framework irgendwie?

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
das framework irgendwie :(
würd ichs selber machen könnt ichs ja kontrolliern, aber so passiert irgendwas im hintergrund

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
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

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
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

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Hmm, das ist schon sehr seltsam. Ein Destructor darf gar nicht ignoriert werden, das wär ja noch schöner :)

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
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

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
dann liegt es eigentlich nahe das das object garnicht zerstört wird und er gleich zur programm-terminierung übergeht :bash:

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Ah, wenn man bei Project Options | Linker "Use debug libraries" anklickt, dann sieht man immerhin einen vernünftigen Call Stack.

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
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

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
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

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
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.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz