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

c# - 关于 C# 项目中神秘接口的警告

每次构建我的 C# 解决方案时,我都会收到一些关于我从未见过或编写过的接口的警告。我尝试用谷歌搜索其中一些,但没有得到任何点击。这些可能被埋在我引用的程序集中吗?如果是这样,有没有办法让这些警告消失?

接口“IAlertable”被标记为 [dual],但不是从 IDispatch 派生的。它将被转换为 IUnknown 派生接口。

接口“ICustomizationPermissionsReports”被标记为 [dual],但不是从 IDispatch 派生的。它将被转换为 IUnknown 派生接口。

接口“IAlertable2”被标记为 [dual],但不是从 IDispatch 派生的。它将被转换为 IUnknown 派生接口。

0 投票
2 回答
149 浏览

asp.net - asp.net 站点的修补方法

我正在开发一个 .net 3.5 中的新项目。

目前客户端正在使用存储过程,我们真的很想使用 LINQ to SQL 来代替。他们使用存储过程的主要原因是因为他们认为它们更容易更新等,他们不使用任何特殊权限或这样我可以看到证明在 LINQ to SQL 上使用存储过程是合理的,只是他们不想更改。

我想如果我可以向他们提供一个解决方案,他们可以轻松地将更改部署到 LINQ to SQL,他们可能更愿意改变主意。

因此,我对 asp.net 项目(而不是 mvc)很好奇如何更新在构建过程中创建的各种程序集。

例如,我所有的 LINQ 代码都在 System.DataAccess 项目中,并且部署到生产环境中,然后使用 LINQ 识别出产品错误。仅部署更改后的 DataAccess 项目(或者更确切地说,部署自 prod 部署以来发生重大变化的任何项目)有多困难。

我不确定会帮助这种情况的一件事是,每次有构建时,所有项目的构建号都会更新,无论是否实际发生更改,因此只需查看项目的版本号即可不足以确定需要重新部署的项目。

我什至不确定是否可以修改构建,所以只有更改后的项目才会更新其版本?

所以基本上我只是对那里的各种修补过程以及利弊(即需要 iis 重置等)感到好奇。

干杯

0 投票
1 回答
950 浏览

c++ - 深奥的 JScript 托管问题:IDispatch::Invoke 返回 SCRIPT_E_PROPAGATE 时的错误代码在哪里?

我们的应用程序托管 Windows Scripting Host JScript 引擎并公开几个可以从脚本代码调用的域对象。

其中一个域对象是一个 COM 组件,它实现了 IDispatch(实际上是 IDispatchEx),它有一个将脚本函数作为回调参数的方法(一个 IDispatch* 作为参数)。此 COM 组件由脚本调用,执行一些操作,然后通过提供的 IDispatch 参数回调到脚本中,然后返回调用脚本。

如果回调脚本碰巧抛出异常(例如,调用另一个 COM 组件,它返回的不是 S_OK),那么对回调脚本的 IDispatch::Invoke 调用将返回 SCRIPT_E_PROPAGATE 而不是 HRESULT来自其他 COM 组件;不是来自其他 COM 对象的预期 HRESULT。如果我将该 HRESULT (SCRIPT_E_PROPAGATE) 返回给第一个 COM 组件的调用者(例如,返回给调用脚本),那么脚本引擎会正确地从另一个 COM 对象抛出一个带有预期 HRESULT 的错误。

但是,找不到实际错误。它不是从 Invoke 调用返回的(返回值为 SCRIPT_E_PROPAGATE)。它不是通过提供给 Invoke 的 EXCEPINFO 返回的(结构保持为空)。而且,它不能通过 GetErrorInfo 获得(调用返回 S_FALSE)!

真的很想解决这个错误,因为缓存它并在后续调用中返回相同的错误会很有用(遇到错误通常涉及由作为传递的脚本函数定义的昂贵操作参数,但我知道如何缓存错误)。有没有办法让脚本化的 COM 组件在回调到提供的脚本函数时遇到异常???

0 投票
1 回答
1790 浏览

c# - 在 C# 中使用参数打包 IDispatch 调用(使用 DISPARAMS)

我正在使用 Invoke 对支持 IDispatch 的旧 COM 对象进行后期绑定。这似乎是必要的,因为 .NET 的 Type.GetMethod Type.InvokeMember 似乎不适用于这些对象。

以下代码适用于从对象获取属性,调用者将属性名称作为字符串传递,以获取具有后期绑定的属性值。该类在其构造函数中获取一个对象,并将 this.idisp(和 this.lcid)设置为指向该对象的接口指针(欢迎批评!)

我现在正在尝试编写 setter 等效项,即

但是我不确定如何用 C# 打包 Dispatch 参数。

即如何设置结构:

我知道我需要从托管对象创建一个非托管变体来编组。任何建议如何做到这一点?

0 投票
4 回答
3023 浏览

delphi - 获取对 IDispatch 接口成员的访问权限

我是物理学家。我正在尝试使用导入的 activex 控件(ocx 文件)在 Delphi 上工作。假设库中有 3 个自动化接口:IGraph、IGraphAxes 和 IAxis。图书馆的结构是这样的:

===IGraph 的属性:===
Idispatch* IGraphAxes;
... //其他成员

===IGraphAxes 的属性:===
Idispatch* XAxis;
Idispatch* Y轴;
Idispatch* Z轴;
整数颜色;
整数样式;
… //其他成员

===IAxis 属性:===
float Min, Max;
布尔显示编号;
… //其他成员

通过 IGraph,我可以使用 GetIDsOfNames() 和 Invoke() 函数访问 IGraphAxes 的简单成员(颜色和样式)。但是当我尝试访问 XAxis(或 YAxis、Zaxis)时,它会产生错误。首先,我使用 GetIDsOfNames() 它返回 XAxis 的 dispid 没有任何问题。但是当我用那个 dispid 调用 Invoke 时,会出现错误“地址访问冲突......”。看来,idispatch 指针 (**Xaxis)* 没有指向任何内容。我该如何解决这个问题?如何使
Idispatch* Xaxis

IAxis 接口相互连接?
PS对不起我的英语,我不是母语人士

0 投票
4 回答
3577 浏览

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

我用一个简单的 COM 对象编写了一个简单的 COM DLL inproc 服务器。COM 对象实现了一个连接点。

我知道如何创建一个派生自 的 ATL 客户端IDispEventImpl,并使用接收器映射来简化此过程。

但是,出于演示的目的,我想创建一个 win32 控制台应用程序,它使用一个调用我的简单 COM 对象的类,然后充当连接点接收器。

我不知道如何提供一个实现IDispatch- 有人可以推荐这方面的文档,因为我找不到任何文档(我有 ATL Internals,但这似乎不能满足我的需要)。

这是我已经上过的课程:

0 投票
2 回答
1427 浏览

c++ - 如何获得一个 IHTMLElement 指针 tag hosting an activex control

I have an ActiveX control generated by the FireBreath framework (http://firebreath.org). I need to get a reference to the <object> tag in the page that hosts the plugin

I have an ActiveX control generated by the FireBreath framework (http://firebreath.org). I need to get a reference to the <object> tag in the page that hosts the plugin from C++.

If I were using NPAPI, I would use the NPNVPluginElementNPObject constant with NPN_GetValue.

so to make sure I am being clear, say I have the following in the page:

<object id="testPlugin" type="application/x-someplugin" width="100%" height="100%"></object>

I want to get a reference to the plugin like I would if I used document.getElementById("testPlugin"), except from within the C++ code of the activex control that is inserted for that mimetype.

Please note that passing the id in as a <param> is not a good option for me, but if there is a way to get the ID from inside the activex control that may work.

edit: I am considering using getElementsByTagName and trying to find it through the DOM, but it would be difficult to tell the difference between two instances of the same plugin.


Thanks to FireBreath contributor jtojanen from Finland, we finally have a solution.

The first thing is that the COM object must be registered as "Apartment", not "Single" (in the registry). Otherwise, this will not work; seems to be a bug in COM.

Then anywhere after SetClientSite is called, you can do the following:

Hope this saves someone some time; it's taken me almost 2 years to find someone who could answer this for me.

The object in htmlElement will be the <object> tag that wraps your plugin; so if you queryInterface for any of your interfaces, it should succeed, but it may not actually literally be your object, it will likely be a wrapper to your object.

0 投票
1 回答
808 浏览

windows - 将结构传递给 IDispatch 方法

在第三方 COM 模块中,我必须将结构传递给方法。

IDL 定义的重要部分如下所示:

我如何使用 ATL 从 C++ 调用该方法?

0 投票
2 回答
391 浏览

.net - 如何使用 .net 向 COM 对象发送事件回调参数

我有一个引用的 COM dll。某些方法需要回调参数。我检查了反射器中的 interop.MyComLib.dll:

如何发送此参数?我无法发送委托(编译异常)。我试过发送this和接收InvalidCastException

0 投票
2 回答
7852 浏览

c++ - IDispatch 错误和/或消息文本列表

我在返回 HRESULTS 的 WMI/WBEM 接口上调用方法。我想向用户显示这些错误代码的有意义的错误消息。但是,当我查看 HRESULT 的错误消息时,我只会得到像“IDispatch error #3598”这样的字符串。

我是否可以找到解释其含义的这些 IDispatch 错误代码的列表?

可能出现错误的示例代码:

错误查找:

注意:没有帮助 - 它不包含我得到的 HRESULTS。它们也不包含在 winerror.h 中。