我正在用 C# 编写一个类库 (IE BHO),目前正在处理大量我认为是来自 REGASM 生成的注册表项的垃圾输出。
简短的版本是这样的:我只想向 IE(以及 COM 的其余部分)公开少数几个类(当前:一个类)。只有一个类设置了 ClassInterfaceAttribute 和 GUID 内容,我可以测试加载项只需要此类的 COM 注册表项——然而,REGASM 会为整个项目中的每个类生成 GUID 和注册表项。
这很烦人而且有点令人不安,因为我不希望我的类名位于用户注册表中,除非他们绝对必须在那里。
公平地说,许多其他类都标记为公共(public)类,因为我在同一解决方案中另一个项目的驱动程序应用程序中使用它们,以解决 IE 的调试黑洞...
总的来说,我对 COM 还很陌生(尤其是与 .Net 相关的),我想知道什么是隐藏我所有其他类以防止重生的最佳方法?或者,至少,当我没有为它们设置任何 COM 标志时,为什么这些类——即使它们被标记为公共(public)的——会出现?
谢谢!
最佳答案
对不需要 public
修饰符的内容使用 internal
访问修饰符。对于真正需要 public
访问的内容,使用 ComVisible 属性来部分隐藏它。
例如:
[ComVisible(false)]
public class ClassToHide {
//whatever
};
public class ClassToExpose {
public void MethodToExpose() {}
[ComVisible(false)]
public void MethodToHide() {}
};
所有公共(public)类的所有公共(public)成员函数和成员变量在默认情况下都是 COM 可见的。因此,首先考虑将它们设为内部,如果您真的需要它们公开,则使用 ComVisible 从 COM 中隐藏它们。
关于C#:Regasm 为我的 COM DLL 中的每个类生成注册表项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1016568/