【发布时间】:2010-11-25 02:02:06
【问题描述】:
首先,我想指出我需要使用 COM/OLE2 API,低级别的东西,可以放在 C Windows 控制台程序中的东西。我无法使用 MFC。我不能使用 .NET。
我的问题是:
给定以下代码:
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));
有没有办法将一些信息写入磁盘,以便我以后可以重新连接到同一个 IE 实例?基本上可以将“iePtr_”字符串化,以便稍后通过其他进程重构?
谢谢。
----稍后添加-----
我要解决的更广泛的问题是我想启动一个 AutoCAD 应用程序,将一些数据加载到其中,然后让它运行以供我的客户与之交互。稍后他会回到我的应用程序,我想重新连接到同一个 AutoCAD 会话并为其提供更多数据。
现在,我完全意识到我可以将 IDispatch 指针保存在我的应用程序的内存中,并且我将能够继续与同一个 AutoCAD 进程进行交互。这是我的后备位置。
但是,我使用“包装器”程序来完成我的 COM 工作。所以包装器是瞬态的。我的主应用程序启动包装器,然后包装器进行通信,然后退出。我只希望后续包装进程能够重新连接到同一个 AutoCAD 进程。
为什么要使用包装器?这是工作的原因:我的主要应用程序是 32 位应用程序,但我可以使用 64 位包装器并与 64 位 AutoCAD 通信。我需要能够与 64 位 AutoCAD 通信,并且可能无法轻松移植我的主应用程序(500K+ 行 C++)与我的包装程序(几百行)。
【问题讨论】:
-
您要解决的更广泛的问题是什么?
-
您应该使用 SUCCEEDED() 而不是 !FAILED() - 这就是它的用途。我将编辑代码。
-
在主帖中添加了“更广泛”的图片内容。
-
这听起来很奇怪。 Autocad COM 服务器是作为 out-proc (exe) 启动的,不是吗。如果是这样,您不在乎它是 32 位还是 64 位。