问题标签 [ole-automation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1308 浏览

vb.net - Document.Save 显示另存为对话框

我有一个 Visual Studio 2010 VB.NET 4.0 Windows 应用程序项目。该代码正在填充 Word 2010 文档。在 30 到 60 个表格的区域中的任何位置以及在 30 到 50 个嵌入图表的区域中的任何位置(都定义为内联形状 ( InlineShape))。

Document.Save()当我收到以下错误时,我不得不开始定期拨打电话: There are too many edits in the document. This operation will be incomplete. Save your work.. 有足够的可用磁盘空间和内存。

在大多数情况下,调用.Save()时会随机显示另存为对话框.Save()。作为旁注,如果我单击取消,则会引发以下错误:Command failed at Microsoft.Office.Interop.Word.DocumentClass.Save().

这是代码的摘录,可让您了解正在发生的事情:

有人知道为什么会显示另存为对话框吗?我能阻止它吗?

是否有原因导致我收到“编辑过多”错误,因此不需要进行如此多的保存(这无论如何都会减慢进程!)?

0 投票
1 回答
457 浏览

delphi - 如何通过 OleAutomation 删除或更改附加模板

我的公司有大量用于生成客户通信的模板。我需要修改现有流程,以便保存生成的文件(模板 + 数据)的副本以供以后编辑。

我的问题是,当我打开这些保存的 MSWord 文档之一,编辑,然后关闭时,MSWord 坚持对模板(在生成过程中选择的模板)进行了更改。

我不确定为什么会发生这种情况,但可能是生成的文档包含对其所基于的模板的引用,但由于模板位于远程位置,MSWord 正在尝试生成新的本地文件.

如果该诊断是正确的,那么我需要一种从文档中删除模板引用的方法。

如果诊断不正确,那么可能的解释/解决方案是什么?


我发现这两个结果文件都包含对模板的引用。

注意:在 Word 中手动编辑没有问题。如果我让字母从 Winword 生成并保存到磁盘,我可以打开它并非常愉快地操作它。在自动化步骤的某个地方,问题正在产生。


有趣的是 - 我已将保存格式更改为'.rtf',但问题仍然存在。

此外 - 如果我说“是”以保存对模板的更改并不重要,它会在我每次打开和关闭文档时继续提示我(无论我是否编辑)


我发现通过保存文档,wdFormatXML我可以看到对信函模板的引用并对其进行编辑。如果我这样做,问题就会消失。

我现在正试图通过自动化实现相同的结果,但没有成功;

不适用于 tmplt 'Normal.dot'、varNull、'c:\progra~1\etc\Simple.dotx' 等值。函数调用告诉我它找不到前 2 个值的模板,或者只是挂起。

我回到我最初的问题 - 如何清除附加的模板?

0 投票
1 回答
1147 浏览

vb6 - oleaut32.dll 注册表损坏

这个问题是我目前处理的最头疼的问题。

我有一个 VB6 应用程序,它接收我几年前从它的原始开发人员那里继承的外部数据馈送。它在远程服务器上运行,可以正常运行一个月左右,然后每次启动时突然崩溃。发生这种情况时,我查看事件查看器并看到 oleaut32.dll 出现“故障”。我发现的解决方法是重新注册 dll。然后应用程序启动并运行没有问题。但是,不可避免地,整个问题会在几个月后再次出现。

我所做的研究表明,有许多问题可能会导致这种情况(恶意软件、补丁等),但是当这个应用程序再次失败时,每隔几个月就会在家里打电话给我,这变得陈旧而令人厌烦。

关于如何缓解此类问题的任何想法?

我很想用更高级的语言重新编写应用程序,但由于许多商业原因,现在这不可行。

0 投票
1 回答
1419 浏览

com - 正确清理 CComSafeArray

鉴于:

我希望 CComSafeArray 的 dtor 会在每个包含的成员上调用 ::VariantClear 并且文档似乎表明:

在某些情况下,最好在不调用 VariantClear 的情况下清除代码中的变体。例如,您可以将 VT_I4 变体的类型更改为另一种类型,而无需调用此函数。BSTR 的 Safearrays 将在每个元素上调用 SysFreeString,而不是 VariantClear。但是,如果收到 VT_type 但无法处理,则必须调用 VariantClear。变体的安全数组也将对每个成员调用 VariantClear

(来源: http: //msdn.microsoft.com/en-us/library/windows/desktop/ms221165 (v=vs.85).aspx )

但是我在 atlsafe.h 的代码中没有看到这样的事情发生。

我只是在错误的地方寻找,还是这只是作为 ::SafeArrayDestroy() 的副作用而发生的——这是唯一通过 CComSafeArray dtor 发生的事情。

0 投票
2 回答
472 浏览

excel - 将数据从excel保存到PB8中的文本文件

我正在使用以下代码将 excel 文件中的数据传输到 Powerbuilder 8 中的制表符分隔的文本文件。但它只传输工作表 1 中的数据。我希望传输 excel 文件中所有工作表中的数据到单个合并的文本文件中。有人可以帮忙吗?

代码 -

0 投票
0 回答
151 浏览

com - 谁负责清理 [in] VARIANT 参数?

在具有 的接口中[in] VARIANT param,调用者是否拥有复制到它的 VARIANT?被调用者是否应该调用VariantClear(或 ATL CComVariant::Attach)该值以确保它被清理?是否有任何地方记录了自动化内存管理规则(以添加到COM 内存管理)?

我知道 an[in] VARIANT *param是调用者拥有的指针,但 an[in] VARIANT param是复制到被调用者的结构,所以有点奇怪。如果所有权没有转移,那么为什么有人甚至会使用 定义接口[in] VARIANT param?在 stdcall x86 和 x86_64 调用约定中,它永远不适合寄存器,因此它并不比 更有效[in] VARIANT *param,因此它似乎毫无意义。

我问是因为我想知道如何实现IUIAutomationPropertyChangedEventHandler::HandlePropertyChangedEvent

0 投票
1 回答
419 浏览

c++ - 进行异步 COM 调用——我必须创建自己的 P/S 吗?

我有一个在类型库中定义并在我的代码中实现的自定义接口。我还没有创建自己的代理/存根。我已经成功地将接口指针从我的主线程(STA)编组到后台线程(STA),在我的例子中使用IGlobalInterfaceTable

从那个后台线程,我想对 UI 线程上的对象进行异步调用。我还没有在我的对象中实现ICallFactory 。我看到标准代理确实实现了 ICallFactory(即,我可以在ICallFactory的后台线程上成功 QI )。但是我的自定义界面的CreateCall失败并显示 HRESULT 0x80040150(无法从注册表中读取密钥)。

为了做到这一点,我是否需要创建自己的明确实现ICallFactory的代理?

这是我的 IDL:

这是我的单元测试中的后台线程过程:


0 投票
1 回答
208 浏览

winapi - 在 HKEY_CURRENT_USER 中注册代理/存根

MIDL 编译器使用写入 HKEY_LOCAL_MACHINE 的注册例程为代理/存根生成代码。有什么方法(最好不破解 MIDL 生成的代码,并且不绕过所有生成的代码来支持自定义代码)在 HKEY_CURRENT_USER 中注册 MIDL 生成的 p/s?

另外:如果 p/s 和 COM 服务器都像这样按用户注册,这会起作用吗?我刚刚发现(在非常令人沮丧的 48 小时后)如果 COM 服务器是按用户注册的,那么在机器范围内注册的 ap/s 将无法正常工作。具体来说,在这些情况下,p/s 的异步调用逻辑(ICallFactory::CreateCall)会失败。

0 投票
1 回答
155 浏览

java - Microsoft Visio OLE 自动化错误日志记录

我正在使用 SWT(标准小部件工具包)提供的 OleAutomation Java API 来操作 Visio 文档。我们使用 OleAutomation 调用在自动化 API 上生成了 Java 包装器。例如:(形状删除)

从应用程序逻辑中的某个位置调用此删除时,我遇到了一个特殊的问题。在一个页面上,我放置一个形状并调用删除。对于奇数调用,删除成功并且 varResult 返回 VT_EMPTY(1st,3rd,5th.... time call)。对于偶数调用(我将形状再次放在页面上并调用 -2nd、4th 6th 等),varResult 返回“null”,表示失败。现在我需要了解偶数呼叫出了什么问题。Visio 自动化框架中是否有某种日志记录工具可以记录失败的原因?

0 投票
0 回答
84 浏览

c++ - Microsoft IDL,更改界面上的属性

前段时间我准备了一个 idl 文件来定义一个 VB6 应用程序的插件接口。

查看代码我发现有一个如下所示的界面:

此接口用于一些 VB6 和 C++ 组件 (dll) 以公开主要插件类,exe 引用类型库以保留插件类的引用。

我现在要做的是删除odlversionnonextensible因为不需要,然后添加object属性以正确定义 COM 接口。

  • 现在整个系统都在生产中,我可以在界面上更改属性吗?
  • 我可以在没有兼容性问题的情况下这样做吗?

谢谢