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

C# 公开.NET类函数而不包装它们,c#,.net,com,comvisible,C#,.net,Com,Comvisible,我有一个COMVisible类MyAPI,我的客户端将使用它作为所有API访问的根对象 我的API位于另一个程序集OtherAPI中,该程序集具有文档和窗口API类(不可见COM) 我想通过MyAPI类将文档和窗口类公开给一个后期绑定的客户端,比如JavaScript [COMVisible(true)] class MyAPI { public OtherAPI::Document NewDocument() { return new OtherAPI::Doc

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

我的API位于另一个程序集OtherAPI中,该程序集具有文档和窗口API类(不可见COM)

我想通过MyAPI类将文档和窗口类公开给一个后期绑定的客户端,比如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可见的


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

您需要阅读文档

为您带来观看乐趣而突出显示的重要部分:)

将特定类型上的属性设置为false将隐藏该类型,并且 其成员。但是,如果 类型是不可见的。将类型的属性设置为false可防止 将该类型导出到类型库;班级不是 注册的;接口从不响应非托管 查询接口呼叫

然而

除非将类及其成员显式设置为false,否则继承 类可以公开给COM基类成员,这些成员在 原始类。例如,如果您将ClassA设置为false,但不执行此操作 将属性应用于其成员,则类及其成员 对COM不可见。但是,如果您从ClassA派生ClassB并导出 ClassB对于COM,ClassA成员成为的可见基类成员 B类

所以它读得很清楚

如果已将父类成员标记为false,则不能公开它们,但是,如果只有父类被标记为false(且该成员未显式标记为false),则可以公开它们


否则,您将不得不重新实现它们。。。对不起,今天这里没有免费的午餐

因为某种原因,它们不可见