Re: Cint OCX

Masaharu Goto (gotom@hpyiddq.jpn.hp.com)
Tue, 19 May 1998 10:13:50 JST


Torsten,

There are several forms of CINT that you can use on Windows-95/NT.

1) CINT.exe Standalone cint executable
2) LIBCINT.dll Cint core DLL linked by any process
3) ROOT/CINT Cint embedded in ROOT framework
4) WILDC.dll Cint + Tcl/Tk , uses LIBCINT.dll
5) CINTOCX.ocx Cint as OCX , uses LIBCINT.dll

1)-4) work fine. There are 10s of thousands of users.
I guess you try to use 5) CINTOCX.ocx which is not largely announced.

I built cintocx.ocx on VC++4.0 and VC++5.0 and tested on VisualBasic4.0.
It works somehow. But I am not sure if I used regitimate way of event
passing.

Cintocx.ocx uses multithreading. When you invoke a function, it send an
event to cint thread by CEvent::PulseEvent(), then Cint thread starts
evaluating the function. When it is done, cint thread sends FireEvalDone
event back to main thread.

The problem may be 'CCintocxCtrl::FireEvalDone()' . FireXXX() should only
be used within one thread. This case, Cint thread sends FireXXX() to
the main thread. I should have used message passing. If this is the
case, quick workaround is to comment out 'origin->FireEvalDone();'
in lib\cintocx\cintocxctl.cpp.

To fix this problem regitimately,
1) Create a hidden window because cint thread is a worker thread
2) Use message passing using ::PostMessage()

Masaharu Goto

> Hello ROOTers,
>
> I have a problem embedding the CINT interpreter into a
> Borland Delphi application (exceptions during every function call).
>
> Has somebody built a working app with CINT?
>
> Regards,
>
> Torsten.
> =======================================
> Torsten Pfuetzenreuter
> e-mail: tp@systemtechnik.tu-ilmenau.de
> Institut fuer Automatisierungs- und Systemtechnik
> Technische Universitaet Ilmenau
> PF 100565
> 98684 Ilmenau
> Deutschland
> Tel.: +49 / 3677 / 69-1467
> Fax : +49 / 3677 / 69-1434
> =======================================