Comment utiliser CoCreateInstance() pour obtenir un objet com?
J'avais inscrit un composant COM.Et je veux l'appeler.
CLSID clsid;
RIID iid;
HRESULT hr = CLSIDFromProgID(OLESTR("se.mysoft"),&clsid);
LPVOID *pRet;
HRESULT hr1 = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, iid, pRet);
Je peux obtenir le clsid de succès, mais où puis-je obtenir de l'iid ?
J'ai utilisé OLE de la VISIONNEUSE de trouver l'interface:
[
odl,
uuid(F3F54BC2-D6D1-4A85-B943-16287ECEA64C),
helpstring("Isesoft Interface"),
dual,
oleautomation
]
interface Isesoft : IDispatch {
Puis j'ai changé mon code:
CLSID clsid;
RIID iid;
IDispatch* pDispatch;
HRESULT hr = CLSIDFromProgID(OLESTR("se.mysoft"),&clsid);
HRESULT hr1 = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, IID_IDispatch,(void **)&pDispatch);
Mais hr1 retourné a échoué.
double possible de Comment récupérer l'ID d'Interface d'une classe COM de sorte qu'il peut être transmis à CoCreateInstance?
Quelle est la valeur exacte de hr1?
Quelle est la valeur exacte de hr1?
OriginalL'auteur CodeCat | 2013-09-03
Vous devez vous connecter pour publier un commentaire.
Votre COM classe implémente une interface, et chaque interface possède son
IID
identificateur. Si vous avez besoin pour obtenir à partir de votre composant COM de mise en œuvre. C'est votre code et vous êtes tenu de fournir l'identifiant qui indique que l'interface que vous demandez.Certaines classes COM mettre en œuvre bien connue de l'interface, de l'esp.
IDispatch
, l'identificateur pour ce qui estIID_IDispatch
, ou__uuidof(IDispatch)
.UPD. Depuis que vous avez trouvé que l'interface d'intérêt est
Isesoft
, votre code sera:Pour obtenir
Isesoft
etIID_Isesoft
,__uuidof(Isesoft)
disponible pour le code C++, vous devez importer les définitions, qui est généralement soit de deux:#include "isesoft\sdk.h"
#import "libid:..."
avec le type de bibliothèque (identificateur d'espace de noms et d'autres caractéristiques s'appliquent)Lorsque vous avez
HRESULT
codes indiquant les échecs, assurez-vous d'afficher les valeurs.Si la bibliothèque COM/composant n'est pas le vôtre, vous avez besoin d'informations supplémentaires de la part du vendeur, ou vous pourriez peut-être regarde les identifiants par type de bibliothèque (voir COM/OLE outil Observateur).
Je peux l'appeler dans visual basic: set se = createobject("se.le logiciel mysoft"). Je ne sais pas comment l'appeler en c++
"Certaines classes COM mettre en œuvre bien connue de l'interface" eh Bien, peut-être utile de faire remarquer que tous COM classes implémentent au moins
IUnknown
🙂J'ai trouvé le mettre en œuvre, mais j'ai toujours échoué.
OriginalL'auteur Roman R.
Vous devez connaître l'interface que vous souhaitez sur votre objet, laisser l'appeler
IMyInterface
.avez-vous essayé d'importer le .dll ? Qui génère des fichiers d'en-tête que vous pouvez inclure pour accéder à l'objet COM. Il suffit d'écrire #import "yourdll.dll" dans votre fichier cpp (et assurez-vous que vous avez un chemin d'accès)
lorsque j'ai importé le fichier dll et compilé , le compilateur montrent beaucoup d'erreur.
OriginalL'auteur Michael M.