【问题标题】:Using a 64bit .Net ActiveX control in 64bit MATLAB在 64 位 MATLAB 中使用 64 位 .Net ActiveX 控件
【发布时间】:2013-10-01 11:23:43
【问题描述】:

我们开始在我们的系统中使用 MATLAB 64 位,并且我们的一些旧 M 代码使用自定义版本的 MSFlexGrid ActiveX 组件,因此我们决定编写它的 .Net 64 位版本。

ActiveX 通过 Windows 窗体主机公开。

[ProgId("FlexiGrid")]
[Guid("88888888-4444-4444-4444-CCCCCCCCCCCC")]
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public partial class GridWinFormsHost : UserControl
{
}

Windows 窗体用户控件通过 ElementHost 嵌入 WPF 用户控件。

    private IGrid grid;

    private void GridWinFormsHostLoad(object sender, System.EventArgs e)
    {
        var host = new ElementHost { Dock = DockStyle.Fill };
        this.grid = new GridView();
        host.Child = (GridView)this.grid;
        this.Controls.Add(host);
    }

控件注册成功,对MATLAB可见,可以通过

actxcontrol('FlexiGrid', Position, Fig, CallBack);

GridWinForms 中公开的方法和属性是可见的,并且可以被获取/设置/调用。

但是,在实例化 ActiveX 之后,我们最终需要通过 MEX DLL 在 MATLAB 进程中调用 .Net。调用在 .Net 中成功执行,但当控制从 .Net 返回时,MATLAB 进程冻结。在不实例化 ActiveX 控件的情况下运行相同的代码成功并且 MATLAB 不会冻结,这意味着实例化 .Net ActiveX 控件可能是 MATLAB 冻结的原因。

在搜索解决方案时,我遇到了this MSDN thread,其中指出:“出现此问题是因为 Windows 窗体使用的消息循环和 COM 客户端应用程序提供的消息循环不同。” 原发帖人总结说他用 WPF + MFC 解决了这个问题,但没有详细说明解决方案。

我还发现this MSDN article 指出:“要使 Windows 窗体在 COM 客户端应用程序中正常工作,您必须在 Windows 窗体消息循环上运行该窗体。” 这也是很有希望,除了解决方案专注于创建新的 Windows 窗体窗口,但我需要运行嵌入在 MATLAB 窗口中的 Windows 窗体用户控件。

所以问题似乎与在非托管应用程序上托管托管 ActiveX 控件有关 - 有什么想法吗?

【问题讨论】:

    标签: c# .net matlab 64-bit activex


    【解决方案1】:

    不是您问题的真正“解决方案”,但可能是 activeX 东西的(恕我直言)替代方案:

    从一些 MATLAB 版本开始(我认为 ~2009 年左右,如果不是,其他人可能会纠正我)您可以直接从 MATLAB 使用 .NET 库,而无需 COM 接口: http://www.mathworks.de/de/help/matlab/getting-started.html

    在语法方面,您可以使用几乎与 java 类一样好的 .NET 类。 特别是,这应该比通过 MEX 与 .NET 交谈要舒服得多——我想。

    【讨论】:

    • 感谢您的建议。我同意调用 .Net 可能比 MEX 更好,我会将其转发给我们团队中的负责人,但是,我假设要在 MATLAB 窗口中实际嵌入任何用户控件,我仍然需要一个ActiveX 控件。
    • 猜你是对的——对于 .NET 对象似乎没有类似于 `actxcontrol' 的函数...(还)
    猜你喜欢
    • 2023-03-03
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    相关资源
    最近更新 更多