Yep.
You
aggregrate it into your own com object that is to be stored in the application
object. And then make all of your method calls/etc thread
safe.
TController = class(TASPMTSObject, IController)
private FFreeThreadedMarshaler: IUnknown;
public
function ObjQueryInterface(const IID: TGUID; out Obj): HResult; override; stdcall; procedure AfterConstruction; override; end; function TController.ObjQueryInterface(const IID: TGUID; out Obj):
HResult;
begin if GetInterface(IID, Obj) then Result := S_OK else if IsEqualGUID( IID, IMarshal ) then Result := FFreeThreadedMarshaler.QueryInterface( IID, Obj ) else Result := E_NOINTERFACE; end; procedure TController.AfterConstruction;
begin inherited; OleCheck( CoCreateFreeThreadedMarshaler( Self, FFreeThreadedMarshaler )); end;
|
- [DUG]: CoCreateFreeThreadedMarshaler Reginald Ebenezer
- Myles Penlington