gpt4 book ai didi

c# - 使用 COM 组件时出错

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

场景 - 我正在编写一个控制台应用程序。需要使用某个名为 Interop.ABCServer.DLL 的 DLL [我是 COM 的新手,所以真的不知道它在这里出现在哪里,但我已经通过 ILDASM 检查了这个 DLL,它打开并显示元数据。所以,我猜这是一个 .NET DLL 而不是 COM DLL]

现在,当我尝试通过从它启动某个类来使用它时,它给了我一个异常 - 检索组件的 COM 类工厂 CLSID<1111-1111....> 由于以下错误而失败: 80040154.

问题 - 假设 COM 组件是一项旧技术并且需要先注册组件,我们需要以某种方式注册它。我如何注册此组件(记住它是 .NET dll 而不是 COM dll)?

以上注册是否解决了问题?如果不是,那么如何解决。

现在我已经使用 regsvr32.dll 注册了 ABCServer.dll。但是,

我有这样的代码,

try
{
Ilookup LP = New LoopUpClass();
IServer Svr = LP.LookUpServer(hostname, port);
}
catch(Exception ex)
{

}

之前出现错误的第 1 行现在只是终止应用程序。我什至在调试时在第 1 行和第 2 行添加了断点。但是控制永远不会到达第 2 行,只要我在第 1 行按 F10,应用程序就会终止。

基本上,一旦我注册了 COM,我该如何使用它。我是否需要从“添加引用”对话框中的“COM”选项卡注册它,或者我是否需要重新创建一个 INTEROP.ABCServer.DLL,或者我可以使用提供给我的原始 INTEROP.ABCServer.DLL。

最佳答案

您的 Interop.ABCServer.DLL 似乎只是 runtime callable wrapper .它仅包含对真实 COM 库进行编码调用的代码。

因此您需要第二个 dll,它是您必须使用 regsvr32.exe 注册的具体 COM 组件。它可能叫做 ABCServer.DLL

对于您附加的问题:

如果提供的 Interop 库是最新的,您就可以使用它。如果没有,您可以使用 TLBIMP.EXE 创建您自己的文件。当直接向 COM dll 添加引用时,CS 会为您即时生成 RCW 库。如果您要使用的多个 COM 库之间没有依赖关系,那绝对没问题。

关于c# - 使用 COM 组件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7832522/

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