我正在尝试连接到正在运行的 Solid Edge 实例,但是 我收到以下错误:
System.MissingMethodException: 'Method not found: 'System.Object System.Runtime.InteropServices.Marshal.GetActiveObject(System.String)'
我一直在搜索关于此错误并且我发现了:
“API 最初从 .NET Core 中删除,因为不包括 COM 支持。”,但它位于 .NET 框架上。
并且“该 API 是运行对象表(ROT)的简单包装器”,因此有一个解决方案直接从源代码拉动功能并修改 Marshal 类。
我想制定另一个解决方案,对于我的项目来说更准确。我们的想法是使用 .NET Framework 4.8.1制作一个 DLL,然后在使用 .NET Core 7编程的另一个项目上使用它。这样我就为DLL制作了这个代码片段:
using System;
using System.Runtime.InteropServices;
namespace SolidEgde.OpenSDK
{
public static class Comunication
{
/// <summary>
/// Connects to or starts a new instance of Solid Edge.
/// </summary>
/// <param name="startIfNotRunning"></param>
/// <returns>
/// An object of type SolidEdgeFramework.Application.
/// </returns>
public static SolidEdgeFramework.Application Connect(bool startIfNotRunning)
{
SolidEdgeFramework.Application application = null;
try
{
// Attempt to connect to a running instance of Solid Edge.
application = (SolidEdgeFramework.Application)Marshal.GetActiveObject(PROGID.SolidEdge_Application);
}
catch { throw; }
if (application != null)
application.Visible = true;
return application;
}
}
public static class PROGID
{
public const string SolidEdge_Application = "SolidEdge.Application"; // HKEY_CLASSES_ROOT\SolidEdge.Application
}
}
然后我从测试项目中调用它,如下所示:
namespace Testeo
{
class Program
{
static void Main(string[] args)
{
SolidEdgeFramework.Application application = null;
application = SolidEgde.OpenSDK.Comunication.Connect(true);
}
}
}
但是我得到了开头提到的错误。
PS:在我的项目中,我尝试连接到 Solid Edge CAD 程序的实例。
根据@Hans Passant的评论,我搜索了有关遗留dll .NET Framework组件和.NET Core集成的更多信息,答案是:
不,不可能以安全的方式在一个项目中同时拥有两者。
为什么?
此问题参考: