gpt4 book ai didi

c# - COM+ 在远程实例中调用方法未知名称错误

转载 作者:行者123 更新时间:2023-11-30 22:25:53 25 4
gpt4 key购买 nike

我有一个 COM dll,我通过互操作引用在我的 .net 项目中使用它。现在我需要将这个 COM 组件移动到另一台远程机器并在那里创建实例。(机器外类似于进程外,可能这是远程处理,我不知道:-))

我所做的是在服务器机器上创建了一个新的 COM+ 应用程序。在此应用程序中添加了此组件。这是它在服务器上的 COM+ 界面中列出的方式。 enter image description here

将此应用导出为代理安装程序并安装在我的客户端机器上。使用以下代码访问这个

Type type;
type = Type.GetTypeFromProgID("DllName.COMName", "serverName", false);
var COMObject = Activator.CreateInstance(type);
var returnValue = COMObject.GetType().InvokeMember("Method_1", BindingFlags.Public | BindingFlags.InvokeMethod, null, COMObject, new object[1] { "1" });

但是我在调​​用 Method_1 时收到未知名称 (0x80020006) 错误?有没有人遇到过类似的问题,请帮助我。

最佳答案

我会做的是:

1) 在 C# 中创建一个等效的接口(interface),如下所示:

[Guid("<the interface IID goes here>")]
public interface ISomeInterfaceName
{
int Method1(...);
int Method2(...);
int Method3(...);
...
}

2) 然后是这个,而不是你最初的后期绑定(bind)代码:

Type type = Type.GetTypeFromProgID("DllName.COMName", "serverName", false);
var COMObject = Activator.CreateInstance(type);
var if = (ISomeInterfaceName)COMObject;
if.Method1(...);

注意:IID 必须是来自接口(interface)的 IID,不要与 CLSID 混淆。方法的布局应与 COM 方法完全对应(方法顺序很重要,如何定义参数和返回类型也很重要)

你也可以 import the TLB来自 COM 组件,如果您有很多这样的类和接口(interface)。

关于c# - COM+ 在远程实例中调用方法未知名称错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12107747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com