function DllOnlineRegister(
const CLSID, IID: TGUID;
out dwCookie:longint):HRESULT;
stdcall;
var
pFact: IClassFactory;
begin
result := DllGetClassObject(
CLSID, IID, pFact);
if bool(pFact)
then
result := CoRegisterClassObject(
CLSID, pFact, CLSCTX_INPROC_SERVER,
REGCLS_MULTIPLEUSE, dwCookie);
end;
function DllOnlineUnregister(
const dwCookie:longint):HRESULT;
stdcall;
begin
// Unregister the object initialized with CoRegisterClassObject
result := CoRevokeClassObject(dwCookie);
end;
Die beiden Prozeduren füge ich der OCX Signatur zu und rufe Sie dann aus der Applikation folgendermassen auf:
type
TFormWhatever =
class(..)
private
fdwClsCookie: longint;
.
.
.
end;
TFormWhatever.FormCreate(..)
begin
if (DllOnlineRegister(CLASS_ActiveXForm, IClassFactory, fdwClsCookie) = S_OK)
then
begin
fTable := TActiveXForm.Create(self);
fTable.Parent := self;
fTable.Align := alClient;
end;
//oder
//CoCreateInstance(CLASS_ActiveXForm, nil,
// CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IOleObject,
// FOleObject);
//FOleObject.Parent := self;
end;
TFormWhatever.FormDestroy(..)
begin
// Unregister the object initialized with CoRegisterClassObject
if bool(fdwClsCookie)
then
ROTable_Interface.DllOnlineUnRegister(fdwClsCookie);
end;