草庐IT

IDispatch

全部标签

c++ - 为连接点客户端提供 IDispatch 实现

我用一个简单的COM对象编写了一个简单的COMDLLinproc服务器。COM对象实现了一个连接点。我知道如何创建从IDispEventImpl派生的ATL客户端,并使用接收器映射来简化此过程。但是,出于演示的目的,我想创建一个win32控制台应用程序,它使用一个调用我的简单COM对象的类,然后充当连接点接收器。我不知道如何提供IDispatch的实现-有人可以推荐这方面的文档吗,因为我找不到任何文档(我有ATLInternals,但这没有似乎无法满足我的需求)。这是我已经上过的课:#pragmaonce#includeusingnamespacestd;//Becausewe'rei

c++ - 使用 IDispatch::Invoke 的 OLE 交互参数构造

我正在学习MicrosoftarticleaboutOLEautomation.据我了解,AutoWrap函数用于调用外部方法、获取/设置属性。让我们尝试理解调用此函数的代码://Makeitvisible(i.e.app.visible=1){//parameterpreparationVARIANTx;x.vt=VT_I4;//typeofparameterx.lVal=1;//valueAutoWrap(DISPATCH_PROPERTYPUT,//setpropertyNULL,//weneednoresultpXlApp,//pointertoExcelappL"Visibl

windows - 在 C++ 中 Hook IDispatch v 表

我正在尝试修改系统中已存在的IDispatch接口(interface)的行为。为此,我的计划是在运行时Hook对象v表并修改指针,使其指向自定义Hook方法。如果我能让它工作,我就可以向现有对象添加新方法和属性。不错。首先,我尝试连接到IUnknown的v表(IDispatch从中继承)并且工作正常。但是,尝试更改IDispatch中的条目根本不起作用。什么也没有发生,代码就像没有钩子(Hook)时一样工作。这是代码,很简单,理解起来应该没有问题#include#include#include#pragmacomment(lib,"Ole32.lib")usingnamespaces

windows - 调用已释放的 COM 对象

我创建了一个COM对象,用于某些应用程序的自动化任务。发生这种情况时,应用程序将启动并显示其主窗口。问题发生在用户关闭主应用程序窗口时。NextInvoke对COM对象的调用不起作用。问题是它不会失败,也不会报告错误。如果我在下一行代码中放置一个调试器断点,它永远不会到达。如果我用try/catch包围Invoke调用,则不会捕获异常。在发布版本中它只是崩溃。这应该如何运作?因为我使用CComDispatchDriver作为IDispatch*的包装器,所以我希望即使用户关闭了应用程序,我的AddRef也会使COM对象保持事件状态。我希望至少得到一些HRESULT作为错误。

c# - 子类可以实现与其父类相同的接口(interface)吗?

我今天之前从未遇到过这个问题,想知道实现这种行为的约定/最佳实践是什么。基本设置是这样的:publicinterfaceIDispatch{voidDispatch();}publicclassFoo:IDispatch{voidIDispatch.Dispatch(){DoSomething();}}publicclassBar:Foo{...}Bar需要子类化Foo,因为它与Bar共享所有相同的属性,并且引入了2个我需要遇到的新属性。我遇到的问题是Foo还需要一个稍微不同的Dispatch()实现。通常它会被重写,但这对接口(interface)方法无效,所以让Bar也实现IDis

c++ - 如何获取指向托管 activex 控件的 <object> 标记的 IHTMLElement 指针

我有一个由FireBreath框架(http://firebreath.org)生成的ActiveX控件。我需要在托管C++插件的页面中获取对标记的引用。如果我使用NPAPI,我会使用NPNVPluginElementNPObject常量和NPN_GetValue。为了确保我表达清楚,假设我在页面中有以下内容:我想获得对插件的引用,就像我使用document.getElementById("testPlugin")时一样,除了从为该mimetype插入的activex控件的C++代码中。请注意,将id作为传递对我来说不是一个好的选择,但如果有一种方法可以从activex控件内部获取ID

c# - C# .NET 是否支持 IDispatch 后期绑定(bind)?

问题我的问题是:C#本身是否支持后期绑定(bind)IDispatch?假装我正在尝试自动化Office,同时与客户安装的任何版本兼容。在.NET世界中,如果您使用安装的Office2000进行开发,那么从现在到世界末日,每个开发人员和每个客户都需要拥有Office2000。在.NET出现之前,我们使用COM与Office应用程序对话。例如:1)使用与版本无关的ProgID"Excel.Application"解析为:clsid={00024500-0000-0000-C000-000000000046}然后使用COM,我们要求将这些类之一实例化为一个对象:IUnknownunk;Co

c# - C# .NET 是否支持 IDispatch 后期绑定(bind)?

问题我的问题是:C#本身是否支持后期绑定(bind)IDispatch?假装我正在尝试自动化Office,同时与客户安装的任何版本兼容。在.NET世界中,如果您使用安装的Office2000进行开发,那么从现在到世界末日,每个开发人员和每个客户都需要拥有Office2000。在.NET出现之前,我们使用COM与Office应用程序对话。例如:1)使用与版本无关的ProgID"Excel.Application"解析为:clsid={00024500-0000-0000-C000-000000000046}然后使用COM,我们要求将这些类之一实例化为一个对象:IUnknownunk;Co

c++ - DISPID_VALUE 对于从脚本调用 IDispatch 是否可靠?

继续thisquestion,我很困惑IDispatch::Invoke()上的DISPID_VALUE是否可以将脚本函数和属性(在我的例子中是JavaScript)视为调用实际函数的标准和可靠由IDispatch?表示如果是,是否在MSDN中的任何地方提到过?请注意,问题是关于这种行为是否可以预期,而不是我无法提前知道的一些接口(interface)可能是什么样子。一个简单的用例是://usageinJavaScriptmyObject.attachEvent("TestEvent",function(){alert("rhubarb");});//handlerinActiveX,

c++ - 使用 ATL 枚举 COM 对象 (IDispatch) 方法?

如何使用ATL(VS2008)枚举给定IDispatch接口(interface)(IDispatch*)上可用的可用方法?我需要搜索具有特定名称的方法,一旦我有了DISPID,调用该方法(我知道该方法采用的参数。)理想情况下,我想使用智能COM指针(CComPtr)来执行此操作。这可能吗? 最佳答案 您可以枚举IDispatch通过类型信息公开的方法。有两种获取类型信息的方式:通过调度接口(interface)的类型库(如果有的话)。通过调用IDispatch::GetTypeInfo.不幸的是,IDispatch实现没有义务提供
12