【问题标题】:Calling C# COM object调用 C# COM 对象
【发布时间】:2009-09-26 20:37:45
【问题描述】:

好的,我创建了一个 c# dll,将其所有接口和方法全部设为 ComVisible(true)。使用 gacutil 将其添加到 GAC,然后使用 regasm 注册并创建类型库 tlb 文件。

现在我有另一个 c# 项目,我想调用该 com 对象,我该怎么做?导入 com 对象然后使用其调用的代码大致是什么样的?

【问题讨论】:

    标签: c# com


    【解决方案1】:

    首先,您为什么要通过 COM 在您的其他 C# 项目中调用该 C# 程序集(您已使其成为可共存的)?没必要……

    主题: 如果你已经创建了一个 tlb 文件,那么你不应该做任何特别的事情。您可以只引用您创建的 c#assembly 的“运行时可调用包装器”。

    【讨论】:

    • 好的,我知道用户最好将其他 c# dll 添加为他们的项目的引用,而不是通过 COM,但我基本上想要做的是测试 COM 调用!不用学C++!有办法吗?如何引用运行时可调用包装器?
    【解决方案2】:

    第 1 步:创建 Runtime-Callable-Wrapper。 有两种方法

    方法一:使用TlbImp生成RCW

    tlbimp <YourCOMSvr>.tlb /out:<YourCOMSvr>.dll
    

    使用这种方式是使用默认的 .NET-Interop Marshalling,有时(意味着当它不起作用时)您需要通过执行附加步骤来更改编组

    ildasm <YourCOMSvr>.dll /out:<YourCOMSvr>.il
    //Modify <YourCOMSvr>.il 
    ilasm <YourCOMSvr>.il /dll
    

    方法2:手动创建一个C++/Cli项目作为COM服务器的封装

    第 2 步:C# 代码

    引用 RCW 并使用以下代码连接到 COM 服务器

    Type yourComType= Type.GetTypeFromProgID(yourComSvrProgID, serverPcName);
    var oInterface = (IYourCOMInterface)Activator.CreateInstance(yourComType);
    //Then start using oInterface 
    

    【讨论】:

      【解决方案3】:

      当您的 C# 组件成为符合 COM 标准的组件时,它也开始表现得像符合标准的 ActiveX 组件。

      因此,测试 COM 调用的一个简单方法是使用 JavaScript 编写一个简单的 HTML 页面代码如下:

      Set MyCOMObj = Server.CreateObject("NAME_OF_COM_EXPOSED_CLASS"); 
      MyCOMObj.My_COM_Method();
      

      如果您能够调用这样的方法而没有任何错误,则意味着您的 COM 调用工作正常。

      感谢和问候
      Anugrah Atreya
      http://explorecsharp.blogspot.com

      【讨论】:

        猜你喜欢
        • 2014-03-05
        • 2012-01-26
        • 2011-05-16
        • 2021-09-14
        • 2017-05-14
        • 2013-02-02
        • 2014-02-05
        • 2019-05-11
        • 2011-06-20
        相关资源
        最近更新 更多