问题标签 [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 投票
0 回答
260 浏览

com - 将接口从 IUnknown 更改为 IDispatch

我有一个只能通过 vtable 访问的 COM 类。它已经分发给客户。我还计划通过引入 IDispatch 来允许脚本访问。

在我的本地测试中,它显示客户端代码不会更改,但它们将需要代码重建,为什么会这样?

0 投票
2 回答
143 浏览

c++ - 通过 IDispatch 公开 COM 函数的服务器如何区分调用函数而不传递任何 ID 参数的不同客户端?

我有一个 Windows 服务,它公开了一些要通过 IDispatch Invoke 调用的 COM 函数。有不同的客户端(Windows 应用程序)可以随时调用任何这些功能。我需要在 Windows 服务中引入一个不需要对客户端进行任何更改的更改(我无法修改它们)。我需要区分(如 ID)哪个应用程序正在调用函数。注意:我不需要知道确切的客户端应用程序,只需区分当前会话中的不同客户端就足够了。

例如:假设有两个客户端 C1 和 C2。当 C1 在 Windows 服务(WS)中调用函数 F1 时,WS 知道每次(在当前会话期间)客户端 X1(注意我说 X1,因为 WS 不需要确切知道 C1 调用了 F1,只需分配C1 的 ID,如 PID~进程 ID~)。因此,现在 C3 调用 F2,WS 知道客户端 X2(与 X1 不同)调用了 F2。然后,C1 调用 FX(WS 公开的任何 COM 函数)WS 可以区分 X1 调用 FX,而不是客户端 Xn(如 X2)调用 FX。

有没有什么可以帮助我在不需要客户 ID 参数的情况下实现这种情况?

0 投票
1 回答
123 浏览

.net - 从 IDispatch 获取用户定义的方法以进行动态装配

因此,我正在处理的程序从用户输入文本编辑器(使用 CodeDOM 作为编译器)的源代码创建一个动态的 .Net 程序集。我需要为这个程序集获取一个包含所有用户定义方法的 IDispatch。

例如,用户可以输入:

这将创建一个我可以引用的内存中程序集。我用来获取 IDispatch 的代码:

这成功地为我获取了 IDispatch,但它不包含任何用户定义的方法。相反,它只包含六个默认的 IDispatch 方法(QueryInterface、GetTypeInfo 等)。我需要能够获得已定义的方法,例如上一个示例中的“Hello”。

如何从该程序集中获取包含用户定义方法的 IDispatch?

0 投票
1 回答
599 浏览

c++ - OLE bstr 不是空终止的?

因此,我正在尝试使用AutowrapMicrosoft 在其自动化示例中提供的功能从 C++ 和 OLE 自动化 Excel。

我已经可以从电子表格中的单元格中读取字符串值。但是,对于某些值,字符串似乎有问题,比如它不是以空值结尾的。这是我的代码:

输出是:

然而,在 Excel 文件中,在 Excel 中显示时,它显示如下:

(Excel 文档的代码页会以某种方式成为问题吗?它是一个xlsx文件。)

0 投票
1 回答
791 浏览

html - Delphi:模拟从剪贴板拖放到 EmbeddedWB 的 IHTMLElement

我有一个带有 TEmbeddedWB 的 Delphi XE2 应用程序,用于模拟用户操作。应用程序导航到一个 URL,用数据填充相关的表单字段并提交数据。问题是有一个<input type=file />字段接受上传的文件。

在对此事进行了大量阅读后,我了解到以编程方式执行此操作存在安全问题,但也发现有人建议文件可以从剪贴板中“拖动”并“放置”到位。从那以后,我成功地将相关文件(jpeg 图像)加载到剪贴板中(感谢 CCR.Clipboard)并将它们放到我的 EmbeddedWB 上。但是,您很可能知道,将图像放到 TWebBrowser 上会求助于正在显示的图像。

我的问题是我正在访问的网页有一个特定的 DIV 元素,它接受要删除的文件。尽管我已经成功地获得了该 DIV 的坐标作为 IHTMLElement,甚至将鼠标光标移动到适当的位置(用于视觉确认),但将图像放在那里仍然会打开它以显示而不是上传它。就好像放置区域没有检测到放置,只有网络浏览器可以。

任何有关此事的指导将不胜感激。以下是相关代码。

方法:

调用代码:

0 投票
0 回答
1016 浏览

c++ - COM IDispatch->Invoke 失败并出现错误 DISP_E_EXCEPTION

我正在尝试调用 IDispatch->Invoke 调用以获取 IDispatch 对象的名称,但该方法失败并出现错误 DISP_E_EXCEPTION。我想要获得的属性是“accName”。下面是尝试执行此操作的代码:

0 投票
1 回答
967 浏览

c++ - 如何获取 LPDISPATCH 指针/接口并将其传递给 activeX 控件

我在 Windows 7 64 位的 Visual Studio 2015 中使用 MFC。

在我的应用程序中,有一个activeX 控件,我需要在activeX 控件和我的应用程序之间进行通信。

但是 activeX 需要我的应用程序将 LPDISPATCH 指针/接口传递给它。

我应该如何获取应用程序方法(OnExtRequest)的 LPDISPATCH 指针/接口?

这是activeX提供的方法:

这是我的应用程序的回调函数(将此函数的 LPDISPATCH 指针/接口传递给 activeX)

请帮助我,谢谢!

0 投票
1 回答
726 浏览

c# - 如何手动将 .NET 对象编组为双 COM 接口?

我编写了一些 C# 代码,它使用 .NET 将 .NET 对象作为IDispatch指针返回给非托管代码Marshal.GetIDispatchForObject,但是,该对象还实现了其他(非 .NET 定义的)COM 接口。但是,在这些接口的非托管世界QueryInterface中,调用它们的方法永远不会中断我的 .NET 代码,并且似乎只返回默认值 (0)。

是否可以将 .NET 对象编组为双接口,以便可以通过IDispatch或通过查询特定接口来使用它?我的类型是公开的,ComVisible我尝试申请[ClassInterface(ClassInterfaceType.AutoDual)]但没有运气。

UnmanagedType.Interface使用编组让事情正常工作我没有任何问题,但是,支持IDispatch也似乎有问题。如果有一种简单的方法可以“手动”实现IDispatch,这也是一个可以接受的解决方案。

0 投票
1 回答
660 浏览

c# - 在 C# 中使用 ComInterop 的 COM 对象后期绑定

我有一个用于一些简单数学实用程序的 COM 对象。其中,它导出 2 个接口 - IDL 如下:

然后一个实现IOneDimSolver是:

如果我想在 C# 中使用这个对象并且我有可用的 TypeLibrary,那么使用这个功能非常容易——我可以实现一些函数来解决:

然后使用它:

这工作得很好,所以没有问题。但是,我还想证明我可以将它与后期绑定一起使用(此时几乎纯粹用于学术目的)。

看起来brent对象正在创建正常,但调用InvokeMember失败并显示消息{"Specified cast is not valid."}

我猜该类型CalculatePi与 COM IDispatch 机器所期望的不兼容,但我只是不确定如何使其工作。任何帮助都会很棒!

0 投票
0 回答
4829 浏览

automation - 信息不可用,没有为 .dll 加载符号

我在 C++ 中应用 Invoke 来使用应用程序的对象,但发生了错误。错误:信息不可用,没有为 GPNSAutomation.dll 加载符号我的代码是: