问题标签 [idispatch]

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 投票
3 回答
2613 浏览

delphi - 在 Delphi 中为 Excel 编写 DLL

我正在使用 Turbo Delphi 2006。

DLL 将作为 VBA/DLL 组合的一部分从 Excel 中调用。

问题的第一部分是试图找出如何将对当前 Excel 会话的引用传递给 DLL。我见过的大多数其他代码是它启动了一个单独的 Excel 实例,而不是你所在的那个。

我见过一些 C++ 代码创建一个实例,IDispatch然后将某些内容传递给 IDispatch 对象的方法,但对 C++ 了解不多。

有任何想法吗?

0 投票
2 回答
907 浏览

delphi - 我如何在 Delphi 中做连接点?

我正在编写一个 DLL,它通过其 IDispatch 接口与 Excel 对话。从 VBA 中,我传入一个 Variant 包含Application.Caller我从中绘制 IDispatch 指针通过.pDispVal.

我想知道的是如何通过 IDispatch 指针查询接口。我想设置一个连接点容器,并从那里找到一个到 Excel 的连接点。最终目标是将事物与 Excel 的计算事件联系起来,并能够操作 Excel 数据。

0 投票
6 回答
16658 浏览

c# - C# .NET 是否支持 IDispatch 后期绑定?


问题

我的问题是:C# 是否天生支持后期绑定 IDispatch?


假装我正在尝试自动化 Office,同时与客户安装的任何版本兼容。

在 .NET 世界中,如果您在安装 Office 2000 的情况下进行开发,那么从现在到结束,每个开发人员和每个客户都必须拥有 Office 2000。

在 .NET 之前的世界中,我们使用COM与 Office 应用程序通信。

例如:

1) 使用与版本无关的 ProgID

解决为:

然后使用 COM,我们要求将这些类之一实例化为一个对象:

现在我们要参加比赛了——能够在我的应用程序中使用 Excel。当然,如果真的要使用对象,就得调用有某种调用方式的方法。

我们可以得到各种接口声明,翻译成我们的语言。这种技术很好,因为我们得到

  • 早期绑定
  • 代码洞察力
  • 编译类型语法检查

一些示例代码可能是:


但是使用接口有一个缺点:我们必须掌握各种接口声明,并翻译成我们的语言。而且我们被困在使用基于方法的调用中,必须指定所有参数,例如:

事实证明,在现实世界中,它有一些我们愿意放弃的缺点:

  • 早期绑定
  • 代码洞察力
  • 编译时语法检查

而是使用IDispatch后期绑定:

因为 Excel 自动化是为 VB 脚本设计的,所以可以省略很多参数,即使没有它们就不会出现重载。

注意:不要将我的 Excel 示例与我想使用 IDispatch 的原因混淆。并非每个 COM 对象都是 Excel。某些 COM 对象除了通过 IDispatch 之外没有其他支持。

0 投票
4 回答
13073 浏览

c# - .NET2.0 C# 互操作:如何从 C# 调用 COM 代码?

在我上一个开发环境中,我能够轻松地与 COM 交互,调用 COM 对象上的方法。这是原始代码,翻译成 C# 样式代码(以掩盖原始语言):

现在开始尝试从托管代码与 COM 互操作的乏味、痛苦的过程。

PInvoke.net 已经包含IWebBrower2 翻译,其相关部分是:

我创建了 COM 类:

所以现在是我实际的 C# 事务的时候了:

细心的读者注意到 IWebBrowser2.Document 是一个后期绑定的 IDispatch。我们在我们和我们客户的机器上使用 Visual Studio 2005 和 .NET 2.0。

那么 .NET 2.0 调用对象上的方法的方法是什么,在某种程度上,它只支持后期绑定的 IDispatch?

快速搜索 Stack Overflow 以使用 C# 中的 IDispatch 出现这篇文章,说我想要的在 .NET 中是不可能的。

那么是否可以从 C# .NET 2.0 使用 COM?


问题是我想在 C#/.NET 中使用一种公认的设计模式。它涉及在进程外启动 Internet Explorer,并为其提供 HTML 内容,同时不使用临时文件。

一个被拒绝的设计想法是在 WinForm 上托管 Internet Explorer。

一个可接受的替代方法是启动系统注册的 Web 浏览器,使其显示 HTML,而不使用临时文件。

绊脚石是继续在 .NET 世界中使用 COM 对象。具体问题涉及在不需要 C# 4.0 的情况下执行对 IDispatch 的后期绑定调用。(即在使用 .NET 2.0 时)

0 投票
2 回答
375 浏览

c++ - 如何使用非托管 C++ 获取 Power Point 的运行版本?

我正在使用带有 Power Point(2003 和 2007)的非托管 C++。

如何使用 IDispatch 获得 Power Point 的运行版本(2003 或 2007)?

谢谢,任何帮助都会很棒。

0 投票
3 回答
1155 浏览

windows - 免费注册 (Regfree) COM

我们使用 COM 对象自动化模型使我们的应用程序可供客户使用。

他们大部分时间都在使用 python 来访问我们的应用程序接口。

由于我们希望能够安装(尚未运行,这是另一个问题)应用程序的不同版本,我们正在将我们的 COM 组件更改为无 regfree。

但这与通过 IDispatch 自动化从脚本语言访问相冲突,因为它们需要注册表中的条目。

我们的方法是创建一个应用程序来管理我们实际应用程序的活动版本。它让用户决定他想要哪个版本,并负责注册表项。

我们的方法有哪些替代方案?

0 投票
1 回答
409 浏览

c++ - 如何从 C++ 插件中检测 PowerPoint 2007?

我需要通过我的 C++ 插件检测我的插件是否在 PowerPoint 2007 中。PowerPoint 对象模型公开了 Application.Version,它应该可以工作,但我对如何将它与 IDispatch 一起使用知之甚少。

如何从 C++ 插件中检测 PowerPoint 2007?

0 投票
3 回答
2924 浏览

com - COM / OLE / ActiveX / IDispatch 混乱

我无法理解这些术语之间的差异。

COM 和 ActiveX 是同义词吗?

ActiveX 对象只是公开 IDispatch 的 COM 对象吗?

许多较旧的 MSDN 页面提到 IDispatch 时没有任何 COM 上下文。它是否有单独的历史,并且是在其生命周期的后期才在 COM“保护伞”下引入的?

OLE 在哪里适合?一般而言,它在 MFC 命名和 MSDN 中的(相当大的)存在 - 都只是遗留问题吗?

维基百科提供了一些见解,但不多。我找不到更深入的参考。

0 投票
2 回答
1732 浏览

c++ - MSHTML IWebBrowser2 - 下沉页面事件导致错过击键?

我的应用程序使用 MSHTML 有点问题。除了主题行中提到的快速打字时奇怪的击键丢失行为外,我一切正常。我认为这可能与我用来接收事件的方法有关?

详细信息:我的应用程序是在 Visual Studio 2005 中用 C++ 和 MFC 编写的单独程序。该程序附加到 Internet Explorer 的当前运行(独立)实例,并获取指向IWebBrowser2接口的指针并将其传递给类型为的对象CCmdTarget

这个类跟踪浏览器中发生的事情。我使用以下命令接收浏览器事件:

如果我注释掉AfxConnectionAdvise,那么不会错过任何击键但不会有更多事件。如果我把它留在里面,我会沉没事件,但如果打字很快就会错过偶尔的击键。

我知道有很多方法可以连接到事件(AtlAdvise连接点),但这是我唯一可以使用的方法。

任何建议都会很棒!

0 投票
3 回答
7274 浏览

c - 如何在纯 C 中使用 IDispatch 来调用 COM 对象

我需要使用 R 工具中包含的 gcc 编译器(R 是 windows 的统计程序)编译我的一些代码,问题是我需要在我的代码中使用 IDispatch 来创建访问 COM 对象的方法,并且gcc 编译器不支持我用来执行此操作的大部分代码,这些代码基本上是 C++ 代码。

所以我的问题是如何在 C 中使用 IDispatch 来创建 COM 对象,而不必依赖于 MFC、.NET、C#、WTL 或 ATL。我相信如果我这样做,我将能够毫无问题地编译我的代码。