使用 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 构造函数。
我正在使用 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 构造函数。