Tout d'abord, j'aimerais noter que j'ai besoin d'utiliser les API COM/OLE2, les éléments de bas niveau, ce que vous pouvez mettre dans un programme de console Windows C. Je ne peux pas utiliser MFC. Je ne peux pas utiliser .NET.Reconnexion au processus démarré via COM
Ma question est:
Vu le code suivant:
CLSID clsid;
HRESULT hr;
hr = CLSIDFromProgID(L"InternetExplorer.Application", &clsid);
assert(SUCCEEDED(hr));
hr = CoCreateInstance(clsid,
NULL,
CLSCTX_LOCAL_SERVER,
IID_IDispatch,
(void **)&(iePtr_));
assert(SUCCEEDED(hr));
Est-il possible d'écrire des informations sur le disque afin que je puisse se reconnecter à la même instance de IE plus tard ? Fondamentalement, "iePtr_" peut-il être stringifié pour une reconstitution ultérieure par un autre processus?
Merci.
---- ------ a ajouté plus tard
Le problème plus large, je suis en train de résoudre est que je veux démarrer une application AutoCAD, charger des données dans, puis le laisser tourner mon client à interagir avec. Plus tard, il retournera à mon application et je veux me reconnecter à la même session AutoCAD et lui fournir plus de données.
Maintenant, je me rends compte que je peux garder le pointeur IDispatch en mémoire dans mon application et que je pourrai continuer à interagir avec le même processus AutoCAD. C'est ma position de repli. Cependant, j'utilise un programme "wrapper" pour faire mes trucs COM. Donc, l'emballage est transitoire. Mon application principale démarre l'encapsuleur, puis l'encapsuleur communique, puis quitte. Je veux juste que les processus de wrapper suivants puissent se reconnecter au même processus AutoCAD.
Pourquoi utiliser un emballage? Voici la raison de travail: Mon application principale est une application 32 bits, mais je peux utiliser un wrapper 64 bits et communiquer avec AutoCAD 64 bits. Je dois pouvoir communiquer avec AutoCAD 64 bits et ne peux probablement pas facilement transférer mon application principale (500K + lignes de C++) par rapport à mon programme wrapper (quelques centaines de lignes).
Quel est le problème plus large que vous essayez de résoudre? – reuben
Vous devez utiliser SUCCEEDED() au lieu de! FAILED() - c'est ce à quoi il est destiné. Je vais éditer le code. – sharptooth
Ajout d'images "plus larges" au message principal. –