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

c++ - 如何比较 VARIANTARG 类型

我正在尝试构建一个函数来将 VARIANTARG 类型分配给 DISPARAMS 结构,并且在弄清楚如何检查 arg 的实际类型时遇到了一些问题。

当我编译这个时,我在 if 语句中得到两个错误:

所以我在这里很困惑:为什么我可以从 VTS_I4 分配一个 BYTE 值,但我以后不能比较它?如果我将 VTS_I4 转换为 BYTE,那么我可以比较它,但它具有不同的值,因此不会触发 if 语句。由于 VTS_I4 在 afxdisp.h 中定义为“\x03”,我可以做的另一件事是检查 if(vt == 0x03),它工作正常,但必须以某种方式出错。

问这个问题的另一种方法可能是为什么我可以这样做:

但不是这个:

谢谢

0 投票
3 回答
1270 浏览

javascript - 在 C++ 中调用 JScript 中的 instanceof 运算符 (IDispatch/IDispatchEx)

我有一个托管 Active Script JScript 引擎的应用程序。根据 jscript.dll 的版本,它可以运行到 JScript 5.8。该应用程序向 JScript 环境公开了许多对象和方法。

当脚本调用某个函数时,IDL 是这样的:

HRESULT func(VARIANT varInput);

我想确定输入是否是instanceof另一个函数(即,该函数是否是其原型在输入原型链中的构造函数)。在 JScript 中:

input instanceof Error

这如何在 C++ 中使用 IDispatch/IDispatchEx 完成?

该方法可以访问 IActiveScript(由 JScript 引擎实现)和 IActiveScriptSite(由宿主实现)接口,因此可以使用 IActiveScript::GetScriptDispatch 获取全局对象,从中可以获取任何其他构造函数(例如Error)取回。

0 投票
2 回答
556 浏览

c#-4.0 - C# 4、COM 互操作和 UPnP:三驾马车

我正在尝试使用 C# 4 和 Microsoft 基于 COM 的NAT 遍历 API (Hnetcfg.dll)编写一些使用 UPnP 进行 NAT 遍历的代码(仅供家庭使用)。

不幸的是(或者幸运的是)我最后一次必须在 .NET 中进行 COM 互操作是在最后一个冰河时代左右,我似乎对 C# 使用动态类型进行互操作以及如何编写回调从根本上感到困惑(这样COM 服务器调用我的托管代码)。

这是令人兴奋的几行代码:

在上面的代码中,Add 和 Remove 调用工作得很好。了不起。

麻烦的是,我还想知道端口映射条目的数量什么时候发生了变化,为此我需要注册一个回调接口(INATEventManager::put_NumberOfEntriesCallback),它必须支持 INATNumberOfEntriesCallback 或 IDispatch 接口。VS2012 的对象浏览器是这样描述 INATEventManager::put_NumberOfEntriesCallback 的:

是的,所以我的印象是,在 C# 4 中,我不应该用花哨的属性来装饰任何东西,我可以通过将委托以粗俗的方式插入 INATEventManager::put_NumberOfEntriesCallback 并让 .NET 担心来注册我的回调关于 IDispatch 并收拾残局;但看来我大错特错了。

所以,呃......我应该怎么做才能确保调用我的 NewNumberOfEntries 方法?

我也有点担心我可以写nat.NATEventManager.NumberOfEntriesCallback = 1;nat.NATEventManager.NumberOfEntriesCallback = "Sausages";不抛出异常。

0 投票
3 回答
3209 浏览

c# - 查找 ActiveX 组件的所有属性

我试着环顾四周,但无法用答案说服自己,因为 COM/ActiveX 的世界似乎非常混乱。
基本上我想知道的是,给定 GUID,有没有办法知道 ActiveX 控件公开的所有接口、属性和方法?我在某处读到,您只需要询问是否存在特定属性即可。但是在知道那里有什么之前,我该如何询问房产呢?
我猜 IDispatch 做了类似的事情,但我无法弄清楚如何使用它。如果这是可行的,那么一个小片段(最好是 C# 中的)将帮助我更好地理解。

谢谢

0 投票
1 回答
417 浏览

c# - 从 C# 传递 IDispatch 参数

我正在编写一个 C# COM dll,托管 C# 以及 Delphi 和 C++ 程序和 javascript 都将使用它。COM dll 包括一个监视器部分,应用程序在该部分注册一个应该向 dll 返回字符串值的函数。我之前已经为javascript“应用程序”做过这个,你只需将一个函数作为参数传递给dll。当 dll 需要查询 javascript“应用程序”时,将运行以下命令:

“theScript”作为对象存储在 C# dll 中。据我了解,这是由 IDispatch 完成的。我现在的理论是我应该能够对其他语言使用相同的方法。所以我用这个签名做了一个 COM 可见的方法:

但是我不知道如何从 C# 将参数传递给这个方法。我尝试过使用委托,但调用委托只是从委托(返回 calss 名称的那个)返回 ToString() 方法。我尝试过的其他任何东西都无法编译。

所以我有两个问题:

  1. 我应该如何从 C# 将方法参数传递给这个 dll,以便 dll 能够在需要时以上面指定的方式调用方法?
  2. 这真的是 IDispatch 还是它适用于 javascript 的另一个原因?

提前致谢

0 投票
1 回答
522 浏览

delphi - 具有相同 GUID 的两个接口的相关交互是什么

我曾经认为 Delphi 中关于接口的类型安全是通过为它设置一个唯一的(可选的,但如果填写的话是唯一的)GUID 来维护的。

然后出现了这个问题:通过 OLE 调用 Word CentimetersToPoints 时出现未指定错误
对此很少跟进: http: //pastebin.ca/2369858

我开始寻找库存的德尔福TWordApplication组件(即Word200.pas单元)。我看到了:

或类似的:

我在这里完全迷失了。

我以前认为是like todispinterface的“子类” ?如果是,那么如何在同一个项目中有两个具有相同 GUID 的接口?interfaceTPersistentTObject

还是它们来自不同的不相关框架,例如 Delphi 新class类型到继承的 TurboPascalobject类型?既不_GlobalDisp也不_ApplicationDisp似乎被使用,Word200.pas所以它们就像附录一样,自动导入但从未实际使用过?

我制作了这个项目,同时使用_Application_ApplicationDisp编译。但是我只是想知道如果他们有相同的 GUID,Delphi 是如何打字的?

0 投票
0 回答
396 浏览

python - 用 IDispatch 包装一个 python 类

我想使用 python 来处理来自 COM 服务器组件的事件。该服务器有一个 register() 方法,它接收 IDispatch 对象并在生成各种事件时在其上调用 OnXXX 方法。

您可以使用 win32com.client 或其他 python 库来实现这一点吗?我没有找到这样做的真实例子。

伪代码:

谢谢!

0 投票
0 回答
413 浏览

visual-c++ - 创建没有 tlb 文件的 ITypeInfo 对象

我想创建一个没有 tlb 文件的 ITypeInfo 对象。

我想实现GetTypeInfo方法,所以我需要返回一个ITypeInfo的指针,但我没有tlb文件。谷歌之后,我找到了这个链接

我需要有关如何在没有 tlb 文件的情况下创建 ITypeInfo 对象的更多信息。“METHOD0”、“METHOD1”未定义。

0 投票
1 回答
212 浏览

javascript - 如何向 javascript 添加新的对象类型?

如您所知,可以使用以下代码创建一个新的数组对象。

现在我为 IWebBrowser 实现了一个 IDispatch 接口,我可以将一个对象传递给 javascript,但是如何处理创建一个自定义对象,如以下代码,CustomObject 是未定义的对象类型。

0 投票
2 回答
2191 浏览

javascript - 如何将c数组从C++传递给javascript

我在“wtypes.h”中找到了一些定义

在我看来,这个定义表明 Variant 可以作为 ac 数组、ptr 或 c 点。但是当我使用跟随代码将 c 数组传递给 javascript 时无法获取 arg 的类型

如何将 c 数组从 c++ 传递给 javascript?