AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi IPropertyPage macht Problämchen
Thema durchsuchen
Ansicht
Themen-Optionen

IPropertyPage macht Problämchen

Ein Thema von Assarbad · begonnen am 17. Nov 2003 · letzter Beitrag vom 18. Nov 2003
Antwort Antwort
Assarbad
(Gast)

n/a Beiträge
 
#1

IPropertyPage macht Problämchen

  Alt 17. Nov 2003, 16:12
Hiho,

ich arbeite grade mit IPropertyPage um eine HTML-Seite in einem nonVCL-Prog dazustellen. Das ganze sieht so aus:

Delphi-Quellcode:
    WM_INITDIALOG:
      begin
// Load settings
        LoadRegistrySettings(hwnd);
        SendDlgItemMessage(hwnd, IDC_RICHEDIT_AGREEMENT, EM_SETBKGNDCOLOR, 0, RGB($DD, $DD, $DD));
        SetWindowLong(GetDlgItem(hwnd, IDC_RICHEDIT_AGREEMENT),
          GWL_USERDATA,
          SetWindowLong(GetDlgItem(hwnd, IDC_RICHEDIT_AGREEMENT), GWL_WNDPROC, Integer(@RichEditSubclassWndProc)));
        CoInitialize(nil);
        lib := LoadLibrary('MSHTML.DLL');
        if lib <> 0 then
        begin
          @CreateHTMLPropertyPage := GetProcAddress(lib, 'CreateHTMLPropertyPage');
          if CreateURLMoniker(nil, 'http://www.erm.tu-cottbus.de/rules/crrules.shtml', pUrlMoniker) = S_OK then
            if CreateHTMLPropertyPage(pUrlMoniker, ppPropertyPage) = S_OK then
            begin
              pUrlMoniker._Release;
              GetWindowRect(GetDlgItem(hwnd, IDC_RICHEDIT_AGREEMENT), rect);
              ScreenToClient(hwnd, rect.TopLeft);
              ScreenToClient(hwnd, rect.BottomRight);
              DestroyWindow(GetDlgItem(hwnd, IDC_RICHEDIT_AGREEMENT));
              ppPropertyPage.Activate(hwnd, rect, True);
            end;
        end;
      end;
    WM_CLOSE:
      begin
// Close the dialog and end the message loop
        ppPropertyPage.Deactivate;
        ppPropertyPage._Release;
        FreeLibrary(lib);
        CoUninitialize;
        EndDialog(hwnd, wParam);
      end;
Das Problem ist nun, dass hinter dem Code in meiner Main-Procedure ploetzlich wahlweise na Exception oder ein Fehler 216 auftritt. Hat jemand ne Idee wo das passiert? ZB in welcher Unit.

Danke im Voraus

Oliver
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#2

Re: IPropertyPage macht Problämchen

  Alt 17. Nov 2003, 16:21
Hier sind uebrigens die benutzten Units:

Delphi-Quellcode:
uses
  Messages,
  ActiveX,
  UrlMon,
  RichEdit,
  CommCtrl,
  Windows;
Plus natuerlich System und SysInit. Keine der obigen hat aber eine initialization oder finalization
  Mit Zitat antworten Zitat
Bernd Ua

Registriert seit: 10. Nov 2003
Ort: Lindhorst
87 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: IPropertyPage macht Problämchen

  Alt 17. Nov 2003, 17:00
Hi,

Hab zwar mit den Propertypages noch nicht rumgespielt und die lok. Variablen fehlen
aber an Deinem Code ist mit trotzdem was aufgefallen.

Warum verwendet du explizite Aufrufe von <interface>._Release ?
Hast Du aus aus der MSDN-Hilfe und einem C++ Beispiel kopiert ?

Wenn du mit Interfaces (oder Longstrings, dyn Arrays) arbeitest,
initialisiert der Delphi Compiler Variablen von diesem Typ automatisch
und sorgt bei Verlassen des Sichtbarkeitsbereichs automatisch für einen
Aufruf von _Release für Interfaces ( bzw FreeMem für Strings , Dynarrays).

Ich tippe darauf, das der Compiler bei deinem Beispiel sieht Wert von zB
ppPropertyPage ist ungleich nil und jetzt versucht den automatischen
_Release aufzurufen loszuwerden für ein Interface dessen DLL Du längst
entladen hast.

Ersetze mal die _release Aufrufe durch :
pUrlMoniker := nil; und
ppPropertyPage := nil; Dann sollten IMHO die Probleme weg sein

Grüsse Bernd
Bernd Ua
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#4

Re: IPropertyPage macht Problämchen

  Alt 17. Nov 2003, 17:11
Hallo Bernd,

dank dir, das war es tatsaechlich. Das gibt doch glattweg ein Bienchen von mir
http://www.diebienemaja.de/images/im_biene_maja.gif

Uebrigens, das Release von pUrlMoniker war auch im Beispielcode von MS gegeben. Vielleicht handhabt der C-Compiler das ja anders

Ich danke dir zumindest nochmal
  Mit Zitat antworten Zitat
Bernd Ua

Registriert seit: 10. Nov 2003
Ort: Lindhorst
87 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: IPropertyPage macht Problämchen

  Alt 17. Nov 2003, 17:16
Hi

Zitat:
Uebrigens, das Release von pUrlMoniker war auch im Beispielcode von MS gegeben. Vielleicht handhabt der C-Compiler das ja anders
Eben ! Er tut nämlich nix, da muss man alles zu fuss machen - deswegen nehmen wir ja Delphi

Das gleiche gilt im übrigen für fast alle Aufrufe von _Release,die Dir in C++ Programmen über den Weg laufen.

Grüsse Bernd
Bernd Ua
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#6

Re: IPropertyPage macht Problämchen

  Alt 17. Nov 2003, 17:39
Danke, das ist doch mal ein wertvoller Hinweis

Borland wird sich schon was dabei gedacht haben, wenn die ganzen Methoden ploetzlich nen Unterstrich bekommen. Ausserdem hatte Hagen mal so ein schoenes Beispiel, wie man Interfaces in Delphi im Sinne von try finally missbrauchen kann ... so gesehen haette ich schon fast selber drauf kommen muesen.

Oliver
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#7

Re: IPropertyPage macht Problämchen

  Alt 18. Nov 2003, 09:07
Eine Ausnahme gibt es aber. Transliert man C++ Source und dieser ruft explizit ._AddRef auf so muß das dazugehörige ._Release drinnen bleiben. Im C++ Source sollten dann zwei ._Release nacheinander vorkommen.

Gruß hagen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz