如果无法创建,为什么COM类需要公开?

时间:2018-11-19 15:46:07

标签: c# com activex com-interop activexobject

我已经按照Microsoft的设计规则为C#库创建了一个COM包装器,并且在通过脚本(VB脚本)或TLB C ++进行消费时,一切似乎都能正常工作。

最近,我们尝试通过Internet Explorer 11中的ActiveX进行使用,并且只有某些功能可用。查明罪魁祸首花了几个小时。 因此,我有一个工厂类来授予对特定数据库的访问权限,并且公开了接口和类,以便COM用户可以创建工厂的实例对象:

[ComVisible(true)]
[Guid("...")]
public interface IFactory
{
    IDbAccess CreateDbAccess(string param);
}

[ComVisible(true)]
[Guid("....")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("Company.Factory")]
public class Factory: IFactory
{
    public Factory()
    { }

    public virtual IDbAccess CreateDbAccess(string param)
    {
        return new DbAccess(param);
    }
}

在实际创建对数据库的访问时,用户应调用:factory.CreateDbAccess(...),然后使用IDbAccess接口。此方法使用javascript返回undefined

[ComVisible(true)]
[Guid("...")]
public interface IDbAccess
{
    string Read();
}

internal class DbAccess: IDbAccess
{
    public string Read();
}

如果我将DbAccess类设为public并应用ComVisibile(true)属性,它将起作用。 谁能解释为什么?我认为该接口足以使用它(在VBScripting中似乎是如此)。

谢谢

0 个答案:

没有答案