Einzelnen Beitrag anzeigen

Benutzerbild von Skasch
Skasch

Registriert seit: 14. Nov 2005
4 Beiträge
 
#8

Re: Nicht installierte ActiveX-DLL in Delphi7 verwenden

  Alt 16. Mär 2007, 12:08
Hi Sherlock,

Vielleicht kommt meine Reaktion zu spät, aber falls es Dich noch interessiert hier die Lösung deines Problems.
Für unsere eigene AX Komponente benutze ich eine temporäre Online-Registrierung um das regsvr32 getue zu umgehen.
Das ganze sieht wie folgt aus:

Delphi-Quellcode:
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;
Dann geht alles, als ob es mit regsvr32 Registriert währe...

Greetings

O.

[edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen. Mfg, SirThornberry[/edit]
  Mit Zitat antworten Zitat