我有一个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类函数。
答案 0 :(得分:0)
您需要阅读文档......
重点突出的部分为您带来快乐:)
在特定类型上将属性设置为false会隐藏该类型和 其成员。但是,如果是,则无法使类型的成员可见 类型是不可见的。在类型上将属性设置为false可防止 该类型从导出到类型库;课不是 注册;接口永远不会响应非托管 QueryInterface调用。
<强>然而!强>
除非您明确将类及其成员设置为false,否则继承 类可以暴露给在COM中不可见的COM基类成员 原班级。例如,如果您将 ClassA 设置为false 而不是 将属性应用于其成员,该类及其成员是 COM看不见。但是,如果您从 ClassA 派生 ClassB 并导出 ClassB 到COM, ClassA 成员成为可见的基类成员 ClassB的。
所以它读得非常清楚。
如果您已将父类成员标记为false,则无法公开它们,但是如果它只是标记为false的父类(并且该成员未明确标记为false) ,你可以揭露它们。
否则,你将不得不再次重新实施它们......对不起,今天没有免费午餐