Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi,

wie kann ich überprüfen ob ein angeforderter Pointer auf eine COM Schnittstelle

überhaupt gültig ist?

Weil im nachfolgendem Code bekomme ich immer ein Access Violation:


hFlash = GetDlgItem(hDlg,IDC_FLASH);
if (hFlash == NULL)
Fehler("hFlash == 0",0);
AtlAxGetHost(hFlash,(IUnknown**)&pIFlashAmbient);
if (pIFlashAmbient == NULL)
Fehler("pIFlashAmbient == 0",0);
pIFlashAmbient->put_BackColor(COLOR_WINDOW); //Access Violation
[/PHP]

Ich meine da mal was in der Art von IsValid() oder so gelesen zu haben, konnte

es aber nicht mehr finden.

Gruß

Guybrush

Geschrieben

Was für ein Interfacepointer ist pIFlashAmbient?

Ich bin mir nicht sicher, ob du nicht bei AfxAxGetHost wirklich ein IUnknown** angeben musst, und dir dann den Zeiger auf das richtige Interface mit QueryInterface holen musst.

Geschrieben

Ok, habs jetzt so gelöst wie du gesagt hast.

Die letzte Zeile bewirkt zwar irgendwie nichts, aber wenigstens kommt

keine Access Violation mehr.


hFlash = GetDlgItem(hDlg,IDC_FLASH);
if (hFlash == NULL)
Fehler("hFlash == 0",0);
AtlAxGetHost(hFlash,&pIUnknown);
pIUnknown->QueryInterface(IID_IAxWinAmbientDispatch,
(void**)&pIFlashAmbient);
if (pIFlashAmbient == NULL)
Fehler("pIFlashAmbient == 0",0);
pIFlashAmbient->put_BackColor(COLOR_GRAYTEXT);
[/PHP]

Um nochmal zum Thema zurückzukommen, bewirkt es eigentlich etwas

sinnvolles wenn ich den Interfacepointer auf NULL überprüfe?

Danke!

Gruß

Guybrush

Geschrieben
Originally posted by Guybrush Threepwood

Um nochmal zum Thema zurückzukommen, bewirkt es eigentlich etwas

sinnvolles wenn ich den Interfacepointer auf NULL überprüfe?

Sicher. Das Problem hier war aber kein Nullzeiger, sondern eine vtable, der so gar nicht da war. An der Stelle der vtable von IAxWinAmbientDispatch, an der put_BackColor steht, ist die vtable von IUnknown (die ja nur drei Einträge hat) schon lange vorbei. Aber das, was da steht, wird als Funktionszeiger interpretiert und aufgerufen. Da ist eine Schutzverletzung nicht weiter verwunderlich. ;)

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...