Tho*_*rin 5 .net com dcom tlbimp
我正在.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 编写的?
我设法让 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);
Run Code Online (Sandbox Code Playgroud)
将接口移动到单独的程序集并不是绝对必要的,但这可以最大限度地减少共享程序集的大小。
| 归档时间: |
|
| 查看次数: |
3028 次 |
| 最近记录: |