我最近开始探索 ASP.NET core,因为我想知道是否可以使用它来创建一个简洁的 Web 界面来控制安装在我的电脑上的程序(该程序有一个 API)。
一切都很顺利,直到我发现.NET Core 3.1没有Marshal.GetActiveObject(我需要它来连接程序)。所以我想我应该聪明地使用 .NET Framework 创建另一个程序,然后引用它。
问题是我仍然遇到此错误(另请参阅下面附加的 GIF):
System.MissingMethodException:“找不到方法:‘System.Object System.Runtime.InteropServices.Marshal.GetActiveObject(System.String)’。”
有人知道如何解决这个特定问题吗?或者对如何最好地处理创建 Web 界面来控制桌面应用程序的业务有意见?我是新手,很想了解更多!
提前非常感谢!
[编辑1] 需要明确的是,我制作了一个针对 .NET Framework 的单独程序(类库)。它编译得很好(因为 .NET Framework 支持 Marshal.GetActiveObject),但无论如何我都会返回错误。我知道 .NET Core 没有实现 Marshal.GetActiveObject。
旧的
Marshal.GetActiveObject
在dotnetcore(net5+)中不存在
我给你一个
MarshalGetActiveObject
功能,其工作方式与旧的 Marshal.GetActiveObject
相同。
[DllImport("oleaut32.dll", PreserveSig = false)]
private static void GetActiveObject(ref Guid rclsid, IntPtr pvReserved, [MarshalAs(UnmanagedType.IUnknown)] out object ppunk)
[DllImport("ole32.dll")]
private static int CLSIDFromProgID([MarshalAs(UnmanagedType.LPWStr)] string lpszProgID, out Guid pclsid)
public static object MarshalGetActiveObject(string progId)
{
Guid clsid;
object obj = null;
if (CLSIDFromProgID(progId, out clsid) == 0)
GetActiveObject(ref clsid, IntPtr.Zero, out obj);
return obj;
}