问题标签 [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.
com - 将接口从 IUnknown 更改为 IDispatch
我有一个只能通过 vtable 访问的 COM 类。它已经分发给客户。我还计划通过引入 IDispatch 来允许脚本访问。
在我的本地测试中,它显示客户端代码不会更改,但它们将需要代码重建,为什么会这样?
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 参数的情况下实现这种情况?
.net - 从 IDispatch 获取用户定义的方法以进行动态装配
因此,我正在处理的程序从用户输入文本编辑器(使用 CodeDOM 作为编译器)的源代码创建一个动态的 .Net 程序集。我需要为这个程序集获取一个包含所有用户定义方法的 IDispatch。
例如,用户可以输入:
这将创建一个我可以引用的内存中程序集。我用来获取 IDispatch 的代码:
这成功地为我获取了 IDispatch,但它不包含任何用户定义的方法。相反,它只包含六个默认的 IDispatch 方法(QueryInterface、GetTypeInfo 等)。我需要能够获得已定义的方法,例如上一个示例中的“Hello”。
如何从该程序集中获取包含用户定义方法的 IDispatch?
c++ - OLE bstr 不是空终止的?
因此,我正在尝试使用Autowrap
Microsoft 在其自动化示例中提供的功能从 C++ 和 OLE 自动化 Excel。
我已经可以从电子表格中的单元格中读取字符串值。但是,对于某些值,字符串似乎有问题,比如它不是以空值结尾的。这是我的代码:
输出是:
然而,在 Excel 文件中,在 Excel 中显示时,它显示如下:
(Excel 文档的代码页会以某种方式成为问题吗?它是一个xlsx
文件。)
html - Delphi:模拟从剪贴板拖放到 EmbeddedWB 的 IHTMLElement
我有一个带有 TEmbeddedWB 的 Delphi XE2 应用程序,用于模拟用户操作。应用程序导航到一个 URL,用数据填充相关的表单字段并提交数据。问题是有一个<input type=file />
字段接受上传的文件。
在对此事进行了大量阅读后,我了解到以编程方式执行此操作存在安全问题,但也发现有人建议文件可以从剪贴板中“拖动”并“放置”到位。从那以后,我成功地将相关文件(jpeg 图像)加载到剪贴板中(感谢 CCR.Clipboard)并将它们放到我的 EmbeddedWB 上。但是,您很可能知道,将图像放到 TWebBrowser 上会求助于正在显示的图像。
我的问题是我正在访问的网页有一个特定的 DIV 元素,它接受要删除的文件。尽管我已经成功地获得了该 DIV 的坐标作为 IHTMLElement,甚至将鼠标光标移动到适当的位置(用于视觉确认),但将图像放在那里仍然会打开它以显示而不是上传它。就好像放置区域没有检测到放置,只有网络浏览器可以。
任何有关此事的指导将不胜感激。以下是相关代码。
方法:
调用代码:
c++ - COM IDispatch->Invoke 失败并出现错误 DISP_E_EXCEPTION
我正在尝试调用 IDispatch->Invoke 调用以获取 IDispatch 对象的名称,但该方法失败并出现错误 DISP_E_EXCEPTION。我想要获得的属性是“accName”。下面是尝试执行此操作的代码:
c++ - 如何获取 LPDISPATCH 指针/接口并将其传递给 activeX 控件
我在 Windows 7 64 位的 Visual Studio 2015 中使用 MFC。
在我的应用程序中,有一个activeX 控件,我需要在activeX 控件和我的应用程序之间进行通信。
但是 activeX 需要我的应用程序将 LPDISPATCH 指针/接口传递给它。
我应该如何获取应用程序方法(OnExtRequest)的 LPDISPATCH 指针/接口?
这是activeX提供的方法:
这是我的应用程序的回调函数(将此函数的 LPDISPATCH 指针/接口传递给 activeX)
请帮助我,谢谢!
c# - 如何手动将 .NET 对象编组为双 COM 接口?
我编写了一些 C# 代码,它使用 .NET 将 .NET 对象作为IDispatch
指针返回给非托管代码Marshal.GetIDispatchForObject
,但是,该对象还实现了其他(非 .NET 定义的)COM 接口。但是,在这些接口的非托管世界QueryInterface
中,调用它们的方法永远不会中断我的 .NET 代码,并且似乎只返回默认值 (0)。
是否可以将 .NET 对象编组为双接口,以便可以通过IDispatch
或通过查询特定接口来使用它?我的类型是公开的,ComVisible
我尝试申请[ClassInterface(ClassInterfaceType.AutoDual)]
但没有运气。
UnmanagedType.Interface
使用编组让事情正常工作我没有任何问题,但是,支持IDispatch
也似乎有问题。如果有一种简单的方法可以“手动”实现IDispatch
,这也是一个可以接受的解决方案。
c# - 在 C# 中使用 ComInterop 的 COM 对象后期绑定
我有一个用于一些简单数学实用程序的 COM 对象。其中,它导出 2 个接口 - IDL 如下:
然后一个实现IOneDimSolver
是:
如果我想在 C# 中使用这个对象并且我有可用的 TypeLibrary,那么使用这个功能非常容易——我可以实现一些函数来解决:
然后使用它:
这工作得很好,所以没有问题。但是,我还想证明我可以将它与后期绑定一起使用(此时几乎纯粹用于学术目的)。
看起来brent
对象正在创建正常,但调用InvokeMember
失败并显示消息{"Specified cast is not valid."}
我猜该类型CalculatePi
与 COM IDispatch 机器所期望的不兼容,但我只是不确定如何使其工作。任何帮助都会很棒!
automation - 信息不可用,没有为 .dll 加载符号
我在 C++ 中应用 Invoke 来使用应用程序的对象,但发生了错误。错误:信息不可用,没有为 GPNSAutomation.dll 加载符号我的代码是: