gpt4 book ai didi

c# - 如何使用来自另一个 .NET 程序集的 ComVisible .NET 库作为 COM 库。

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

我为 .Net 4.0 创建了一个测试 COM 项目。然后我用 regasm 注册它:

RegAsm /codebase  TestCom.dll /TLB

它在 JavaScript 中可以正常工作:

var app = new ActiveXObject("TestCom.TestClass");
app.Message1("123");

我想为 .Net 3.5 使用另一个 C# 项目中的 TestCom.TestClass,但是当我尝试添加对该项目的引用时,我收到有关更高框架版本的错误。 “添加引用”对话框(COM 部分)仅显示对 tlb 文件的引用,而不是 dll。

这是应该的方式吗?当我尝试添加对 tlb 文件的引用时,出现错误:

"Add a reference to the .NET assembly instead"

如何从 .Net 3.5 的另一个 C# 项目创建 TestCom.TestClass 实例?

最佳答案

IDE 可以从您选择的类型库中得知 COM 服务器是在 .NET 中实现的。而且它就是不让你加,这样做没有意义。当您改为添加对 .NET 程序集的引用时,它同样有效,实际上更好。

这并不是说你不能骗过机器,你可以使用 dynamic 关键字进行后期绑定(bind)。 IDE 无法干涉它。但是您没有以非托管客户端将要使用服务器的方式实际测试 COM 服务器。 CLR 将在运行时发现 COM 服务器实际上是一个 .NET 服务器并缩短管道。换句话说,它不会为服务器创建 RCW。服务器不会创建 CCW,现在它的工作方式与添加程序集引用时的工作方式完全相同。

所以这样做确实没有意义。只需添加程序集引用,即可享受 IntelliSense 支持和静态类型检查带来的诸多优势。并以测试任何 .NET 库的方式测试 COM 服务器代码。您不测试,并且根本无法测试的是 COM 互操作层。没关系,这并不是真正的问题。如果它是出于某种神秘的原因,那么你就无法对此做任何事情,CLR 内部的 COM 互操作无论如何都是一个黑盒子。

除了测试服务器代码之外,您需要做的就是执行集成测试。只需确保实际的非托管客户端实际上可以使用服务器即可。你做到了,你已经知道它在 Javascript 中运行良好。

关于c# - 如何使用来自另一个 .NET 程序集的 ComVisible .NET 库作为 COM 库。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19951427/

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