2009-10-13 12 views
1

J'ai une application que j'utilise pour analyser les données d'un document HTML. L'application a fonctionné pendant quelques années jusqu'à cette semaine où la méthode QueryInterface pour IID_IPersistStreamInit a commencé à échouer. L'appel à QueryInterface renvoie -2147467262 qui échoue le test SUCCEEDED (hr). Des idées pour lesquelles ça marche?La méthode QueryInterface pour le IID_IPersistStreamInit a cessé de fonctionner

Merci, Wade

if (!myIE->IsValid()) 
    return; 

HRESULT hr; 
LPDISPATCH lpDispatch = NULL; 
LPOLECOMMANDTARGET lpOleCommandTarget = NULL; 
LPPERSISTSTREAM lpPersistStream = NULL; 

lpDispatch = myIE->GetHtmlDocument(); 

ASSERT(lpDispatch); 

if (lpDispatch == NULL) 
    AfxMessageBox("Couldn't get IHTMLDocument2 interface!");  
else 
{ 
    hr = lpDispatch->QueryInterface(IID_IPersistStreamInit, (void**) &lpPersistStream); 
    if (SUCCEEDED(hr) && lpPersistStream != NULL) 

Répondre

0

À quel moment êtes-vous d'exécuter le code ci-dessus? Dans le cas où il ne se fait pas, vous devez l'exécuter seulement après les points suivants:

  1. Navigation vers about: blank avoir mshtml correctement chargé
  2. Assurez-vous que l'événement DocumentComplete est appelé, ce qui signifie la navigation est terminée, avant passez.

Alors seulement est-il sûr de demander l'interface de flux. Pour plus d'informations, voir Loading HTML content from a Stream. Maintenant, si tout cela est connu et pris en compte, vous pouvez poursuivre la solution dans l'autre direction. Le code d'erreur signifie "Aucune interface prise en charge". Je vais essayer de trouver quel est le composant qui contient cette interface, puis ré-enregistrer. Mais étant donné que ce sont des choses que vous avez affaire à IE, je doute un peu que l'installation est foutu.

+0

Je navigue vers une page Web comme http://www.google.com/ ou un document HTML sur mon ordinateur local. J'attends que la page soit chargée avant d'appuyer sur le bouton pour voir ou sauvegarder la source. L'appel QueryInterface échoue sur tous les fichiers que j'ai essayés. Je devine que peut-être une mise à jour IE a été poussée sur ma machine entre vendredi et lundi; briser ce programme. –

+0

Je devrais ajouter que l'appel à GetHtmlDocument() est réussi. –

+0

Cela peut être stupide, mais encore - IE n'a pas fonctionné sur mon poste de travail aujourd'hui, probablement en raison de certaines mises à jour. Le redémarrage l'a réparé. Avez-vous essayé de redémarrer votre poste de travail après l'apparition du problème? – eran