J'ai créé une application de console win32 qui importe un fichier ".ocx" à partir du kit de développement logiciel geovision. J'ai trouvé le CLSID et l'ID d'interface des composants COM dans les en-têtes ".tli" et ".tlh" générés et tout fonctionne jusqu'à ce que j'appelle une méthode (Login2 par exemple dans mon code ci-dessous). Puis _com_exception se produit et il ne donne aucune information détaillée sur ce qui se passe exactement.Utilisation des méthodes COM dans l'application console
Quelqu'un peut-il me donner un indice que dois-je faire ensuite ou où devrais-je chercher une solution? Il m'a fallu plus d'une semaine pour atteindre ce point d'utilisation des composants COM dans l'application console ... J'espère que c'est possible de le faire.
#include "stdafx.h"
#include "stdio.h"
#import "C:\Windows\GeoOCX\SinglePlayer\20121003\GVSinglePlayer.ocx" \
named_guids no_namespace no_smart_pointers
int _tmain(int argc, _TCHAR* argv[])
{
try
{
CoInitialize(NULL);
_DGVSinglePlayer* pSP = 0;
HRESULT hr = CoCreateInstance(CLSID_GVSinglePlayer ,NULL, CLSCTX_INPROC_SERVER,DIID__DGVSinglePlayer,reinterpret_cast <void**>(&pSP));
_bstr_t lpIPAddress("11.11.11.11");
long iPort=10000;
_bstr_t lpUserID("abcde");
_bstr_t lpPassword("password");
if (SUCCEEDED (hr))
{
hr = pSP->Login2(lpIPAddress,iPort,lpUserID,lpPassword);
if (SUCCEEDED (hr))
{
printf("Cool");
}
}else
{
}
pSP->Release();
CoUninitialize();
} catch (_com_error& e)
{
char buf[80];
sprintf(buf, "Error: %S",e.Description());
printf("%s\n",buf);
}
return 0;
}
Depuis e.Description() imprime pas d'info, j'attatched informations visuelles sur l'erreur.
Que retourne 'CoCreateInstance'? Ne testez pas en utilisant la macro 'SUCCEEDED', mais plutôt avec' S_OK == hr'. Une méthode peut renvoyer 'S_FAILED' et la macro' SUCCEEDED' va évaluer TRUE. –
il retourne S_OK – narr
E_UNEXPECTED est un rapport d'erreurs bâclé. La seule chose précise à ce sujet est que vous ne l'attendiez pas non plus. Je suppose que vous devez donner une meilleure adresse IP, numéro de port et nom d'utilisateur + mot de passe pour obtenir quelque part. Ce que vous avez utilisé ressemble à une supposition aléatoire. Contactez l'auteur de ce code si vous avez besoin d'aide. –