[Lazarus] ActiveX, TOLEControl

LacaK lacak at zoznam.sk
Wed Oct 19 14:01:40 CEST 2016


>
>
>> Hi *,
>>
>> I need help with OCX component (not visual I guess), which I need use 
>> in Lazarus application (to control another application, which 
>> supplies this OCX control).
>> I have imported type library using importtl.exe (new unit was created 
>> successfully)
>>
>> Then in program I have created instance:
>>   v := CreateOleObject('SCAPS.ScSamlightClientCtrl');
>> or
>>   intf := CreateComObject(CLASS_ScSamlightClientCtrl) as 
>> _DSamlight_client_ctrl_ocx;
> What is the type of your V or intf  variable?

V: OLEVariant;
intf: _DSamlight_client_ctrl_ocx;

> I am wild guessing maybe they are not proper referenced type so the 
> object is created and then immediately freed.

There is something strange behind scene. I have tried various methods:

var
   v1: OLEVariant;
   v2: ScSamlightClientCtrl;
   v: variant;
   ax: TActiveXContainer;
   disp: IDispatch;
   i: integer;

begin
   v1 := CreateOLEObject('SCAPS.ScSamlightClientCtrl');
   i := v1.scIsRunning;  // exception here

   v2 := CoScSamlightClientCtrl.Create;
   i := v2.scIsRunning;  // exception here

   ax := TActiveXContainer.Create(Self);
   //ax.OleClassName := 'SCAPS.ScSamlightClientCtrl';
   CoCreateInstance(CLASS_ScSamlightClientCtrl, nil, 
CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IDispatch, disp);
   ax.ComServer:=disp;
   ax.Active := True;
   v := disp;
   i := v.scIsRunning;  // exception here

So in every case it returns exception when I try call first time 
interface method ...
I am not familiar with ActiveX technology so I have no idea what is wrong ?

-Laco.



More information about the Lazarus mailing list