问题标签 [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.
winapi - 使用 WinApi (Automation) 函数 VarFormat (oleaut32.dll) 后取消格式化值?
是否可以取消格式化使用 VarFormat 函数 (oleaut32.dll) 格式化的值?
功能说明:
delphi - 如何使用 Delphi XE7 从 Word 2013 中的文本和表单域中获取文本?
我构建了一个小程序来使用 Delphi 从 .docx 中读取所有文本。它适用于普通文本和快速部件,但我在论坛和教程中找到的解决方案都不适用于我的文本字段或表单字段。我正在使用 Word 2013 和 Delphi XE7,我的文档有 2 个表单字段,一个名为“姓名”,另一个名为“作者”,还有一个文本字段。
这是我的代码:
我也为文本字段尝试了这个:
并且在每个地方我都用 WordDocument1.[...] 替换了 WordApplication1.ActiveDocument.[...] ,反之亦然......没有任何效果。
当我调试时,文本字段的 .Count 函数总是返回 0,当我尝试获取表单字段的 .Result 时,我得到了找不到字段的错误(不知道错误的英文措辞) .
有谁知道,我做错了什么以及它将如何工作?
提前致谢,
莉亚
delphi - TWordApplication 句柄更改 ReadOnly 状态
我正在使用 TWordApplication 处理 MS Word 文件。当用户更改文档时,我需要显示消息,但是当文档为只读时,不应显示消息。
打开只读文档时出现问题,然后用户可以选择查看 - 编辑文档并进行一些更改。在这种情况下,我需要显示消息,但文档的属性 ReadOnly 没有改变。
用户启用编辑文档时如何处理操作?
我没有任何想法,请建议我。
vbscript - VBScript:如何调用在调度图中用元音定义的函数
我有以下创建 Microsoft COM 对象的 VBScript-Script。
该 COM 对象的实现在动态链接库中,该库Foo.dll
使用 Microsoft Foundation Framework (MFC),尤其是Dispatch Maps机制。
调度图是这样显示的
到现在为止还挺好。当我在 VBA 环境中创建这样的 COM 对象时,例如在 Excel 应用程序中,调用foo.Einfügen
成功。除了在 VBScript-Script 中。
我认识到OLE 自动化适用于 VBA 和 VBScript。但是当我运行 VBScript-Script 时,我得到了错误
错误:未知字符;代码 8000A0408;
来源:Microsoft VBScript 中的编译失败
首先我认为 VBScript-Script 中的编码是错误的,因为字符ü
,但我验证它是 ANSI 编码的。我还验证了我系统上的Windows 代码页是Windows-1252西方拉丁字符集。
如果我在 Dispatch Map 中更改Einfügen
为Einfuegen
,我断言 VBScript-Script 正在工作。
foo.Einfügen
所以我的问题是,为什么VBScript中的调用行为与 VBA 中的不同?这种行为的原因是什么?
对我来说,解决方法是我DISP_FUNCTION
在 Dispatch Map 中附加第二个 Entry 来分派Einfuegen
给函数Insert
。在我调用的 VBScript-Scriptfoo.Einfuegen
中,在 VBA 中仍然是foo.Einfügen
.
c# - 如何处理“未定义构造函数”和“无法嵌入类型”异常?
添加 Excel 12 参考(其中添加了 Microsoft.Office.Interop.Excel 和 VBIDE DLL)后,我从此处复制并粘贴了代码,即:
但是,它无法使用两个错误消息构建:
“Microsoft.Office.Interop.Excel.ApplicationClass”类型没有定义构造函数
-和:
无法嵌入互操作类型“Microsoft.Office.Interop.Excel.ApplicationClass”。请改用适用的接口。
...两者都指向这条线作为罪魁祸首:
如果我从该行中删除“new”,则第一个 err msg 将更改为:
“ Microsoft.Office.Interop.Excel.ApplicationClass”是一个“类型”,在给定的上下文中无效
所以这是一个“Catch 2”的情况——无论我做什么,它都会捕获两个错误。
我能做些什么来解决这个问题?
c# - 为什么应该保存的文件没有真正保存?
以下代码取自本教程,用于使用 C# 创建和保存 Excel 文件:
它似乎运行良好——我看到了 MessageBox 消息,我可以单步执行它而没有任何问题的迹象。但是该文件没有按原样保存到硬盘驱动器中。为什么不?
c# - 使用 PerlNET 将 COM 对象从 C# 传递到 Perl
我正在尝试将 COM 对象从 C# 代码传递给 Perl。
目前,我正在使用 PerlNET(PDK 9.4;ActiveState)包装我的 Perl 代码,并且我在 Perl 中定义了一个简单的子例程(+ 所需的 pod 声明)来将对象从 C# 传递到包装的 Perl 模块。
似乎我传递的对象没有被正确识别为 COM 对象。
一个例子:
在 C# (.NET 4.0) 中,ScriptControl 用于从用 VBScript 编写的文件中加载一个简单的类。
我得到的 ( obj
) 是类型System.__ComObject
。当我将它传递给我的 Perl/PerlNET 程序集并尝试Xyz()
在 Perl 中调用方法时,我得到以下(运行时)异常:
但是,如果我在 Perl 中或多或少地做同样的事情,它就可以工作。(在以下情况下,仅传递我的 .vbs 文件的内容作为参数。)我什至可以使用脚本控件:
现在,调用Xyz()
工作obj
正常(使用 Win32::OLE)。
在这两种情况下,我都使用:
另一种方法:如果我准确指定要使用的重载以及要传递的类型,我可以通过使用类
来调用方法:InvokeMember
System.Type
使用这种方法意味着重写整个包装的 Perl 模块。并使用这种语法..
现在我想知道,通过将 PerlNET 与 COM 对象结合使用,我是否会同时失去 .NET 4.0 中 dynamic 关键字的优点和 Perl(使用 Win32::OLE)的动态特性。
似乎我首选的解决方案归结为某种模仿dynamic
C#/.NET 4.0 中关键字行为的方式。
或者,更好的是,找到某种方法将传递的 COM 对象转换为可被识别为与Win32::OLE
. 也许提取一些信息__ComObject
以便将其正确识别为 COM 对象。
我必须补充一点,我也发布到了 PDK 讨论网站(但还没有得到任何回复): http: //community.activestate.com/node/18247
我也将它发布到 PerlMonks - 因为我不完全确定这更像是 Perl 还是 C#/.NET 问题:
http ://www.perlmonks.org/?node_id=1146244
我将不胜感激任何帮助 - 或建议在哪里进一步寻找。
winapi - 如何创建 POINT 的安全数组?
对于 oleautomation 类型,有 VT_xxx 类型:
对于自定义类型,有 IRecordInfo:
SafeArrayCreateEx(VT_RECORD, 1, &rgbounds, pRecInfo);
但是什么是 Windows 系统类型(例如 POINT)的正确类型?
visual-c++ - 究竟什么是 VARIANT 数据结构?
我正在学习 Microsoft OLE 自动化和 COM,它使用 VARIANT 来传递数据。我读过它是联合数据结构,但没有找到足够的信息。
由于我是自动化和 COM 的新手,这对我了解更多关于 VARIANT 会有帮助吗?