4

我正在.NET 4(VS2010,C#)中开发一个 DCOM 服务器。就其本身而言,这工作正常。

现在,我还需要为这个 DCOM 服务器开发一个 .NET 客户端,但我无法添加对 TypeLib 的引用。Visual Studio 会告诉我类型库是从 .NET 程序集中导出的,不能作为参考添加。

这个问题的答案表明我应该能够用来TlbImp.exe生成包装程序集,但它也会拒绝这样做:

TlbImp:错误 TI1029:类型库“MyWrapper”是从 CLR 程序集导出的,不能作为 CLR 程序集重新导入。

我知道从纯粹的 .NET 角度来看,为此使用 DCOM 可能没有多大意义。但是,非 .NET 应用程序也应该可以访问同一服务器。

我尝试将我的 tlb 转换为 IDL 并从中重新生成 tlb,但这并不能欺骗 Visual Studio。

也许可以在重新生成之前稍微修改 IDL,或者有什么方法可以强制使用 DCOM,即使服务器和客户端都是用 .NET 编写的?

4

1 回答 1

3

我设法让 DCOM 工作,但我不确定它是否可以从 TypeLib 完成。修改 IDL 允许我导入类型库,但它最终在编译期间失败(尽管这被 Visual Studio 视为警告)。可能仍然可以对文件进行更多修改,但我使用的是更简单的解决方案。

DCOM 服务器的所有接口定义都移到了单独的程序集中,然后直接从 .NET 客户端引用。这绕过了导入问题。

然后,访问 DCOM 服务器与人们所期望的没有什么不同:

Guid clsId = new Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
Type type = Type.GetTypeFromCLSID(clsId);
IMyInterface comObject = (IMyInterface)Activator.CreateInstance(type);

将接口移动到单独的程序集并不是绝对必要的,但这可以最大限度地减少共享程序集的大小。

于 2011-02-23T08:46:27.193 回答