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:
I remember in Delphi, I sometimes have to call CoInitialize and CoUninitialize.
Not sure if FPC has to do the same.
Have you tried that?

I did debuging in Delphi looking at what is called and I have found, that when I add two other lines it works!:
var
  Unknown: IUnknown;
  PersistStreamInit: IPersistStreamInit;
begin
  Unknown := CreateComObject(CLASS_ScSamlightClientCtrl);
  // these two lines are necessary:
  OleCheck(Unknown.QueryInterface(IPersistStreamInit, PersistStreamInit));
  OleCheck(PersistStreamInit.InitNew);
  FSamlightClientCtrl := Unknown as ScSamlightClientCtrl;
 ...
end;

I have no idea why they are needed, but may be that they perform some initialization of component ... I also wonder if other users can suffer from it ?

-Laco.

--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus-ide.org
http://lists.lazarus-ide.org/listinfo/lazarus

Reply via email to