问题标签 [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 回答
74 浏览

automation - 如何定义 Disparams(组件对象模型)

我想用invoke调用一个方法。我的对象输入是一个字符串,它是我计算机中文件的地址,输出类型是 IDispatch。我应该如何将 Disparams 定义为调用的输入。我的代码是:

请帮我正确定义disparams。

0 投票
1 回答
314 浏览

c++ - `IDispatch::GetTypeInfo()` 接口是否正常?

我正在尝试查找有关IDispatch界面是否抛出的信息,特别是是否抛出IDispatch::GetTypeInfo()。IIRC,IDispatch::Invoke()可以,但我似乎找不到关于这个主题的任何内容,这里这里的文档没有提到任何关于此的内容。

0 投票
0 回答
334 浏览

winapi - VariantClear 发布 VT_DISPATCH -vs- MSDN 文档

VS2015 C++ / Windows7 SP1

考虑以下代码:

在这之后,

所以一切看起来都很好。现在我打电话

我调试到(ASM),我发现了这个:

按照代码:

如我所见,它释放了 COM 接口。但是,如果我看到有关 VariantClear 的MSDN 文档:

如果要清除的变量是通过引用传递的 COM 对象,则 pvarg 参数的 vtfield 为 VT_DISPATCH | VT_BYREF 或 VT_UNKNOWN | VT_BYREF。在这种情况下,VariantClear 不会释放对象。因为被清除的变体是一个指向对象引用的指针,所以 VariantClear 无法确定是否需要释放该对象。因此,调用者有责任酌情释放或不释放对象。

据此,它不应该在 IFontDisp 上调用 release。

谁能解释这里发生了什么?

谢谢。

0 投票
1 回答
309 浏览

c++ - 如何将 com 实例转换为变体,在 idispach 调用中传递它

我想将 com 对象实例作为变体参数传递给另一个活动的 x 对象函数,为此我需要将 idispatch 指针转换为变体?我不知道。

这是实例创建代码,之后我使用这个:

并将它传递给一个活动的 x 方法,但它在调用后给出了访问冲突。我做错了什么?

0 投票
2 回答
113 浏览

c++ - COM 客户端连接 COM 服务器需要哪些文件(进程外场景)?

我想了解本文中提到的文件的用途,并将知识链接到我当前的 COM 服务器和 COM 客户端场景,以便我可以实现我的 COM 服务器以使用 COM 服务器:这个

我有一个 COM 服务器,它是一个在后台运行的 exe 或服务。现在,我知道有一个继承自 IUnknown 和 IDispatch 的公开接口。此外,我还生成了以下文件:

  1. xxx_i.c 定义了所有的 CLSID 和 IID

  2. xxx_i.h 定义了接口支持的所有方法

  3. xxx_pc ?

  4. dlldata.c ?

我现在使用自动化方式 IDispatch -> Invoke() 来访问接口方法。尽管这种方式在不使用上述任何文件的情况下似乎可以正常工作,但我仍然想了解它们的用途,同时使用常规方式 IUnknown -> QueryInterface() 来访问这些方法。

由于我是 COM 世界的新手,任何建议的阅读将不胜感激!谢谢!

0 投票
0 回答
132 浏览

delphi - Delphi - 如何实现自定义超时

我想为我的包装类实现自定义超时。

此代码正在运行但没有超时:/

让我们看看我实现了什么:

定义:

执行:

用过的:

我正在使用 Tokyo 10.2 并想在“TComplusWrapper.Execute”函数中编写自定义超时来监控,例如,如果需要太长时间,则强制结束“fComplus.fxExecute()”函数。有什么可能的想法吗?

提前致谢

0 投票
0 回答
3248 浏览

.net - 是什么导致 mscorlib 递归资源查找错误

以下屏幕截图中显示的错误偶尔会发生:

在此处输入图像描述

应用程序本身在非托管 C++ 中,使用 COM 对象和通过 COM 互操作的 .NET 对象(在 C# 和 VB 中)。

我们的代码中只有堆栈跟踪中的两个函数

McWrapperControl.ControlHost.InvokeMethod

McWrapperControl.ControlHost.InvokeMethod_ArgsArray

在这种情况下,我相当肯定正在发生 MissingMethodException,但这应该被捕获并忽略。显然,在尝试调用它之前,我可以通过检查命名方法的存在来防止这个错误。

除此之外,任何人都可以解释可能导致这种递归的原因吗?

0 投票
1 回答
184 浏览

c++ - 如何在 C++ 中声明具有属性的 COM 接口

我正在尝试在 Eclipse C++ 环境(MinGW GCC 工具链)中调用已注册的 COM 接口(Inproc dll)。因此,我不相信我可以像在 Visual C++ 中通常那样简单地导入 dll 类型库。我正在尝试自己定义接口以简化函数调用,而不是使用 Invoke。

oleview 外接口的 IDL 如下所示:

我试图在我自己的头文件中定义接口,如下所示:

这似乎适用于方法调用,但不适用于属性。当我尝试调用任何属性函数时,我会遇到访问冲突。但是,如果我使用类似的东西,它似乎确实有效

那有意义吗?有没有更好的方法来声明 COM 接口的属性,以便我可以像使用普通属性一样使用它们?

0 投票
1 回答
126 浏览

shell - 如何获取 DShellFolderViewEvents 的方法签名

我正在尝试DShellFolderViewEvents使用 ATL 下沉,而我能够成功订阅的唯一方法是DISPID_SELECTIONCHANGED. 标题中似乎列出了许多其他事件shdispid.h,但我无法让它们触发。不知道我做错了什么(它可能与 ATL 相关),但我想也许我正在使用错误的签名实现事件处理函数(目前我只是在尝试不带参数的 void 函数)。问题是似乎没有描述这些DShellFolderViewEvents方法的文档。有谁知道如何弄清楚这些?

0 投票
2 回答
165 浏览

c++ - 在 C++ 中,如何初始化指向 wchar_t* 的指针数组(导致 wchar_t**)?

我正在调用一个需要wchar_t**参数的 COM 函数。我想做的是:

我得到的是 a const wchar_t**,编译器拒绝了它。

我也试过:

我得到的是wchar_t* (*)[3],编译器也拒绝了。

我是 C++ 的新手,并且对字符串文字的处理方式感到非常困惑。

ETA:我尝试​​使用的函数是 GetIDsOfNames,第二个参数是我遇到问题的地方。我想在该参数中传递 3 个名称(我可以成功传递一个名称,wchar_t ptName[] = L"namestring"但不知道如何在一个数组中组合多个名称)。