Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: Fehler bei Aufruf eines TForms mit TWebbrowser aus DLL

  Alt 10. Jan 2005, 10:23
Zitat von MaBuSE:
Wenn's fertig ist, werde ich hier die Lösung posten.
Es funktioniert nun.

Die Komponente TWebBrowser verwendet eine Unit, die den InitProc-Pointer auf eine eigene Procedure setzt. Application.Initialize prüft ob der Zeiger gesetzt ist und ruft dann diese Procedure auf.
Delphi-Quellcode:
procedure TApplication.Initialize;
begin
  if InitProc <> nil then TProcedure(InitProc);
end;
Da in einer DLL dieser Zeiger nicht gesetzt wird, kommt es zu diesem Fehler.
Delphi-Quellcode:
if not IsLibrary then
begin
  SaveInitProc := InitProc;
  InitProc := @InitComObj;
end;
Dummerweise ist die Procedur InitComObj nur im implementation Teil der Unit definiert.
Sie lässt sich also nicht direkt aufrufen. Deshalb habe ich meiner Unit folgenden initialization Abschnitt hinzugefügt. (Sollte nur ein mal im Programmstehen.)


Folgenden Quelltext habe ich in die Unit1.pas aufgenommen:
Delphi-Quellcode:
...
// In ComObj wird der InitProc verbogen, aber nur wenn keine DLL :-(
// : if not IsLibrary then
// : begin
// : SaveInitProc := InitProc;
// : InitProc := @InitComObj;
// : end;
// Leider ist InitComObj nur lokal in der implementation definiert,
// deswegen hier dieses manuelle Init
var
  NeedToUninitialize: Boolean;

initialization
  //InitComObj;
  if (CoInitFlags <> -1) and Assigned(ComObj.CoInitializeEx) then
  begin
    NeedToUninitialize := Succeeded(ComObj.CoInitializeEx(nil, CoInitFlags));
    IsMultiThread := IsMultiThread or
      ((CoInitFlags and COINIT_APARTMENTTHREADED) <> 0) or
      (CoInitFlags = COINIT_MULTITHREADED); // this flag has value zero
  end
  else
    NeedToUninitialize := Succeeded(CoInitialize(nil));
  //--InitComObj

finalization
  if NeedToUninitialize then CoUninitialize;

end.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat