gpt4 book ai didi

c++ - 重新连接到通过 COM 启动的进程

转载 作者:行者123 更新时间:2023-11-30 18:14:42 24 4
gpt4 key购买 nike

首先,我想指出,我需要使用 COM/OLE2 API、低级内容、可以放入 C Windows 控制台程序中的内容。我不会使用MFC。我无法使用 .NET。

我的问题是:

给出以下代码:



CLSID clsid;
HRESULT 小时;

hr = CLSIDFromProgID(L"InternetExplorer.Application", &clsid);
断言(成功(小时));

hr = CoCreateInstance(clsid,
无效的,
CLSCTX_LOCAL_SERVER,
IID_I调度,
(void **)&(iePtr_));
断言(成功(小时));

有没有办法将一些信息写入磁盘,以便我稍后可以重新连接到同一个 IE 实例?基本上可以将“iePtr_”字符串化以便以后通过其他进程进行重构吗?

谢谢。

----稍后添加------

我试图解决的更广泛的问题是我想要启动一个 AutoCAD 应用程序,将一些数据加载到其中,然后让它运行以供我的客户与之交互。稍后他将返回我的应用程序,我想重新连接到同一个 AutoCAD session 并为其提供更多数据。

现在,我完全意识到我可以将 IDispatch 指针保留在应用程序的内存中,并且我将能够继续与相同的 AutoCAD 进程进行交互。这是我的后备位置。

但是,我使用“包装”程序来执行 COM 操作。所以包装器是暂时的。我的主应用程序启动包装器,然后包装器进行通信,然后退出。我只是希望后续包装器进程能够重新连接到同一个 AutoCAD 进程。

为什么要使用包装器?工作原因如下:我的主要应用程序是 32 位应用程序,但我可以使用 64 位包装器并与 64 位 AutoCAD 进行通信。我需要能够与 64 位 AutoCAD 通信,并且可能无法轻松移植我的主应用程序(超过 500K 行 C++ 行)与我的包装程序(几百行)。

最佳答案

如果应用程序在运行对象表中注册了自身,则可以使用 GetActiveObject函数来获取对应用程序对象的引用。

IUnknown *pUnknown;

hr = GetActiveObject(clsid, NULL, &pUnknown);
assert(SUCCEEDED(hr));

hr = pUnknown->QueryInterface(IID_IDispatch, (void **)&(iePtr_));
assert(SUCCEEDED(hr));

关于c++ - 重新连接到通过 COM 启动的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1369827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com