使用 C# 调用 OCX(COM) 方法

Calling OCX(COM) method using C#

我正在使用 C# 中的 OCX 库。我添加了来自 Visual Studio 的 COM 引用。当我尝试在这个 class 中创建一个 object 时,我得到,

var ocxCls = new MyOCXClass();

CS1729  'MyOCXClass' does not contain a constructor that takes 0 arguments

如果我使用反射来查看参数和构造函数计数,

        Type tt = typeof(MyOCXClass);
        var  flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
        var cs = tt.GetConstructors(flags)[0].GetParameters().Count();

构造函数的个数为1,参数为0?发生什么事了?

更新: 当我在 OLEView 中打开 OCX 时,我得到了,

我没有使用控制台应用程序,而是使用了 WinForm 应用程序。现在 Visual Studio 生成一个我可以实例化的 class。

在控制台中,生成的 class 是,

[ClassInterfaceAttribute(0)]
[ComSourceInterfaces("OCX.__OCX")]
[Guid("SomeGuid")]
[TypeLibType(32)]
public class OCXClass : _OCX, OCX, __OCX_Event
{
    [DispId(1610809349)]
    public virtual void OCXMethod1(ref short milliseconds);
    [DispId(1610809350)]
    public virtual bool OCXMethod2();
}

虽然在 WinForms 中显示,

[Clsid("{SomeGuid}")]
[DesignTimeVisible(true)]
public class OCXClass : OCXClassHost
{
    public OCXClass();
    public virtual void OCXMethod1(ref short milliseconds);
    public virtual bool OCXMethod2();
}

当我使用 JustDeCompile 时,我也看到了,

[ClassInterfaceAttribute(0)]
[ComSourceInterfaces("OCX.__OCX")]
[Guid("SomeGuid")]
[TypeLibType(32)]
public class OCXClass : _OCX, OCX, __OCX_Event
{
    [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
    internal extern OCXClass();

注意我认为阻止我创建对象的内部 extern 构造函数。