使用 ASP.Net 创建 Web 界面来控制桌面应用程序

问题描述 投票:0回答:1

我最近开始探索 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 缺失

c# asp.net asp.net-core .net-core .net-framework-version
1个回答
0
投票

旧的

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.