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. ;)

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...