You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为已运行的Aspen HYSYS进程创建COM接口而非启动新实例

获取已运行Aspen HYSYS进程的COM接口实例

要连接已运行的Aspen HYSYS实例并获取其COM接口,不能直接使用new HYSYS.Application()(这会创建新实例),而是要利用COM的**运行对象表(ROT)**机制,通过以下两种常用方法实现:

方法1:通过ProgID获取活跃实例

使用Marshal.GetActiveObject方法直接获取ROT中已注册的HYSYS实例:

using System.Runtime.InteropServices;

HYSYS.Application hyApp = null;
try
{
    // 尝试连接已运行的HYSYS实例
    hyApp = (HYSYS.Application)Marshal.GetActiveObject("HYSYS.Application");
}
catch (COMException ex)
{
    // 无活跃实例时,新建一个
    if (ex.ErrorCode == -2147221021) // MK_E_UNAVAILABLE 错误码
    {
        hyApp = new HYSYS.Application();
    }
    else
    {
        // 处理其他COM异常
        throw;
    }
}

方法2:通过已打开的HYSYS文件绑定实例

如果知道已打开的HYSYS案例文件路径,可使用Marshal.BindToMoniker直接绑定到对应实例:

using System.Runtime.InteropServices;

// 替换为实际的HYSYS案例文件路径
HYSYS.Application hyApp = (HYSYS.Application)Marshal.BindToMoniker(@"C:\Projects\MyHysysCase.hsc");

注意事项

  • 确保项目已正确引用Aspen HYSYS的COM类型库(在项目中添加COM引用,选择对应版本的"Aspen HYSYS Type Library")
  • 若同时运行多个HYSYS实例,GetActiveObject只会返回第一个匹配的实例;如需遍历所有实例,需通过Windows API操作ROT,实现相对复杂
  • 使用完COM对象后,记得手动释放以避免内存泄漏:
if (hyApp != null)
{
    Marshal.ReleaseComObject(hyApp);
    hyApp = null;
}

内容的提问来源于stack exchange,提问作者Reza Afzalan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:25:00