【问题标题】:Using an ActiveX in WPF without UI在没有 UI 的 WPF 中使用 ActiveX
【发布时间】:2015-05-05 18:27:44
【问题描述】:

我一直在查看 Stackoverflow 线程 ActiveX control without a form,在取得了一些成功之后,我遇到了障碍。

我似乎能够创建我的 AX 实例,但我不确定如何访问该事物以调用方法。这是我的实现:

class DirectAudio : UserControl, IDisposable
{
private myAxControl myAx;
private Thread axThread;

public DirectAudio()
{
    BuildAx();
}

private void BuildAx()
{
    axThread = new Thread((ThreadStart) delegate
    {
        myAx = new PanasonicOCXControl();
        myAx.CreateControl();
        System.Windows.Forms.Application.Run();
    });
    axThread.SetApartmentState((ApartmentState.STA));
    axThread.IsBackground = true;
    axThread.Start();
}

public void Dispose()
{
    axThread.Abort();
    aX.Dispose();
}

public void Connect(CameraConfig cameraConfig)
{
    try
    {
        myAx.Invoke(new Action(() => myAx.Disconnect()));  //how do I do this??
    }
    catch (Exception ex)
    {
        Logger.ToDebug(ex);
    }            
}
}

当 Connect() 方法中的 myAx.Invoke 运行时,我得到以下信息:

{"Invoke or BeginInvoke cannot be called on a control until the window handle has been created."}

我应该如何调用 myAx?

【问题讨论】:

  • 你没有消息循环。
  • 哦,我明白了,我错过了 Application.Run()。我添加了它(并编辑了我的帖子),但仍然得到相同的结果。
  • 在这里查看我的完整指南stackoverflow.com/questions/37310418/…

标签: c# wpf activex


【解决方案1】:

如果你想直接使用没有 UI 的 ActiveX 你可以试试这个

[DllImport("ole32.dll", PreserveSig = false)]
[
 return :MarshalAs(UnmanagedType.Interface)
]
public static extern object CoCreateInstance([In] ref Guid clsid, [MarshalAs(UnmanagedType.Interface)] object punkOuter, int context, [In] ref Guid iid);

public object createComOCXObject() {
 Guid IID_IUnknown = new Guid("{00000000-0000-0000-C000-000000000046}");

 var clsid = new Guid("{6bf52a52-394a-11d3-b153-00c04f79faa6}"); //your ocx clsid 

 object ocxObj = CoCreateInstance(ref clsid, (object) null, 1, ref IID_IUnknown);
 return ocxObj;
}

这个问题可以参考我的回答see link

【讨论】:

    猜你喜欢
    • 2014-04-05
    • 2012-11-01
    • 2016-09-15
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多