公开.NET类函数而不包装它们

时间:2018-02-08 05:55:05

标签: c# .net com comvisible

我有一个COMVisible MyAPI ,我的客户将用作所有API访问的根对象。

我的API在另一个程序集 OtherAPI 中有 Document Window API类(不是COM可见)。

我想通过 MyAPI 类将 Document Window 类暴露给后期绑定客户端,例如JavaScript。

[COMVisible(true)]
class MyAPI
{
    public OtherAPI::Document NewDocument()
    {
        return new OtherAPI::Document();
    }
}

// Something like this should work in the client code
(new MyAPI()).NewDocument().GetName();

问题在于它没有看到 GetName ,因为我认为这不是COM visible

我可以在此类中包含Document和Window类中的每个函数,但我正在寻找一个优雅的解决方案。我希望我的客户端应用程序能够通过MyAPI对象同时使用Document和Window类函数。

1 个答案:

答案 0 :(得分:0)

您需要阅读文档......

重点突出的部分为您带来快乐:)

ComVisibleAttribute Class

  

在特定类型上将属性设置为false会隐藏该类型和   其成员。但是,如果是,则无法使类型的成员可见   类型是不可见的。在类型上将属性设置为false可防止   该类型从导出到类型库;课不是   注册;接口永远不会响应非托管   QueryInterface调用。

<强>然而!

  

除非您明确将类及其成员设置为false,否则继承   类可以暴露给在COM中不可见的COM基类成员   原班级。例如,如果您将 ClassA 设置为false 而不是   将属性应用于其成员,该类及其成员是   COM看不见。但是,如果您从 ClassA 派生 ClassB 并导出    ClassB 到COM, ClassA 成员成为可见的基类成员   ClassB的。

所以它读得非常清楚。

如果您已将父类成员标记为false,则无法公开它们,但是如果它只是标记为false的父类(并且该成员未明确标记为false) ,你可以揭露它们。

否则,你将不得不再次重新实施它们......对不起,今天没有免费午餐