问题标签 [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.
automation - 如何定义 Disparams(组件对象模型)
我想用invoke调用一个方法。我的对象输入是一个字符串,它是我计算机中文件的地址,输出类型是 IDispatch。我应该如何将 Disparams 定义为调用的输入。我的代码是:
请帮我正确定义disparams。
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。
谁能解释这里发生了什么?
谢谢。
c++ - 如何将 com 实例转换为变体,在 idispach 调用中传递它
我想将 com 对象实例作为变体参数传递给另一个活动的 x 对象函数,为此我需要将 idispatch 指针转换为变体?我不知道。
这是实例创建代码,之后我使用这个:
并将它传递给一个活动的 x 方法,但它在调用后给出了访问冲突。我做错了什么?
c++ - COM 客户端连接 COM 服务器需要哪些文件(进程外场景)?
我想了解本文中提到的文件的用途,并将知识链接到我当前的 COM 服务器和 COM 客户端场景,以便我可以实现我的 COM 服务器以使用 COM 服务器:这个
我有一个 COM 服务器,它是一个在后台运行的 exe 或服务。现在,我知道有一个继承自 IUnknown 和 IDispatch 的公开接口。此外,我还生成了以下文件:
xxx_i.c 定义了所有的 CLSID 和 IID
xxx_i.h 定义了接口支持的所有方法
xxx_pc ?
dlldata.c ?
我现在使用自动化方式 IDispatch -> Invoke() 来访问接口方法。尽管这种方式在不使用上述任何文件的情况下似乎可以正常工作,但我仍然想了解它们的用途,同时使用常规方式 IUnknown -> QueryInterface() 来访问这些方法。
由于我是 COM 世界的新手,任何建议的阅读将不胜感激!谢谢!
delphi - Delphi - 如何实现自定义超时
我想为我的包装类实现自定义超时。
此代码正在运行但没有超时:/
让我们看看我实现了什么:
定义:
执行:
用过的:
我正在使用 Tokyo 10.2 并想在“TComplusWrapper.Execute”函数中编写自定义超时来监控,例如,如果需要太长时间,则强制结束“fComplus.fxExecute()”函数。有什么可能的想法吗?
提前致谢
.net - 是什么导致 mscorlib 递归资源查找错误
以下屏幕截图中显示的错误偶尔会发生:
应用程序本身在非托管 C++ 中,使用 COM 对象和通过 COM 互操作的 .NET 对象(在 C# 和 VB 中)。
我们的代码中只有堆栈跟踪中的两个函数
McWrapperControl.ControlHost.InvokeMethod
和McWrapperControl.ControlHost.InvokeMethod_ArgsArray
在这种情况下,我相当肯定正在发生 MissingMethodException,但这应该被捕获并忽略。显然,在尝试调用它之前,我可以通过检查命名方法的存在来防止这个错误。
除此之外,任何人都可以解释可能导致这种递归的原因吗?
c++ - 如何在 C++ 中声明具有属性的 COM 接口
我正在尝试在 Eclipse C++ 环境(MinGW GCC 工具链)中调用已注册的 COM 接口(Inproc dll)。因此,我不相信我可以像在 Visual C++ 中通常那样简单地导入 dll 类型库。我正在尝试自己定义接口以简化函数调用,而不是使用 Invoke。
oleview 外接口的 IDL 如下所示:
我试图在我自己的头文件中定义接口,如下所示:
这似乎适用于方法调用,但不适用于属性。当我尝试调用任何属性函数时,我会遇到访问冲突。但是,如果我使用类似的东西,它似乎确实有效
那有意义吗?有没有更好的方法来声明 COM 接口的属性,以便我可以像使用普通属性一样使用它们?
shell - 如何获取 DShellFolderViewEvents 的方法签名
我正在尝试DShellFolderViewEvents
使用 ATL 下沉,而我能够成功订阅的唯一方法是DISPID_SELECTIONCHANGED
. 标题中似乎列出了许多其他事件shdispid.h
,但我无法让它们触发。不知道我做错了什么(它可能与 ATL 相关),但我想也许我正在使用错误的签名实现事件处理函数(目前我只是在尝试不带参数的 void 函数)。问题是似乎没有描述这些DShellFolderViewEvents
方法的文档。有谁知道如何弄清楚这些?
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"
但不知道如何在一个数组中组合多个名称)。