【问题标题】:Calling OCX(COM) method using C#使用 C# 调用 OCX(COM) 方法
【发布时间】:2021-02-16 06:23:52
【问题描述】:

我正在使用 C# 中的 OCX 库。我从 Visual Studio 添加了 COM 引用。当我尝试在这个类中创建一个对象时,我得到了,

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 时,我得到了,

【问题讨论】:

  • “发生了什么?” - OCX 的精彩世界。你有关于这个库的其他文档来源吗?在与 OCX 打交道一段时间后,我只能建议您不惜一切代价避免使用它们。是的,全部
  • @Fildor 如果我按 F12,我只能看到 public virtual 成员 od 这个 OCX 类
  • 但是除了默认的 CTORS 之外没有其他 CTORS,对吧?还是根本没有 CTOR?网络上的某个地方没有进一步的文档?
  • 即使我在 F12 中也没有看到任何构造函数。我看到它继承自 3 个接口。如果我通过 Visual Studio 反编译生成的库,我会看到 [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] internal extern MyOCXClass();
  • 那是entirely normal。如果您在 api 中找不到工厂方法,则必须与作者交谈。

标签: c# com ocx


【解决方案1】:

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

在控制台中生成的类是,

[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();

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-29
    • 2017-09-10
    • 2011-07-17
    • 1970-01-01
    • 2011-08-03
    • 2014-07-02
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多