.NETCore中是否有System.Runtime.InteropServices.Marshal.GetActiveObject()的替代项?
方法.NETCore中是否有System.Runtime.InteropServices.Marshal.GetActiveObject()的替代项?,.net,com,.net,Com,方法GetActiveObject()在.NET Framework中的System.Runtime.InteropServices.Marshal中可用,但在.NET Core()中不可用 如果我想使用.NET Core(来自PowerShell 7),有什么办法吗?特定的API已经消失,但您可以轻松地p/调用以获取该信息。这里有一个在Windows(和.NET framework)上适用于.NET Core 3.1+的等效实现: 公共静态对象GetActiveObject(字符串progId
GetActiveObject()
在.NET Framework中的System.Runtime.InteropServices.Marshal中可用,但在.NET Core()中不可用
如果我想使用.NET Core(来自PowerShell 7),有什么办法吗?特定的API已经消失,但您可以轻松地p/调用以获取该信息。这里有一个在Windows(和.NET framework)上适用于.NET Core 3.1+的等效实现:
公共静态对象GetActiveObject(字符串progId,bool throwOnError=false)
{
if(progId==null)
抛出新ArgumentNullException(nameof(progId));
var hr=CLSIDFromProgIDEx(progId,out var clsid);
如果(hr<0)
{
如果(错误)
元帅。通过hr(hr)的例外情况;
返回null;
}
hr=GetActiveObject(clsid、IntPtr.Zero、out var obj);
如果(hr<0)
{
如果(错误)
元帅。通过hr(hr)的例外情况;
返回null;
}
返回obj;
}
[DllImport(“ole32”)]
私有静态外部int-CLSIDFromProgIDEx([marshallas(UnmanagedType.LPWStr)]字符串lpszProgID,out-Guid-lpclsid);
[DllImport(“oleaut32”)]
私有静态extern int GetActiveObject([Marshallas(UnmanagedType.LPStruct)]Guid rclsid,IntPtr pvReserved,[Marshallas(UnmanagedType.IUnknown)]out object ppunk;
我不是Powershell专家,但我认为您可以将其移植到Powershell,或者直接在Powershell中使用一些C
public static object GetActiveObject(string progId, bool throwOnError = false)
{
if (progId == null)
throw new ArgumentNullException(nameof(progId));
var hr = CLSIDFromProgIDEx(progId, out var clsid);
if (hr < 0)
{
if (throwOnError)
Marshal.ThrowExceptionForHR(hr);
return null;
}
hr = GetActiveObject(clsid, IntPtr.Zero, out var obj);
if (hr < 0)
{
if (throwOnError)
Marshal.ThrowExceptionForHR(hr);
return null;
}
return obj;
}
[DllImport("ole32")]
private static extern int CLSIDFromProgIDEx([MarshalAs(UnmanagedType.LPWStr)] string lpszProgID, out Guid lpclsid);
[DllImport("oleaut32")]
private static extern int GetActiveObject([MarshalAs(UnmanagedType.LPStruct)] Guid rclsid, IntPtr pvReserved, [MarshalAs(UnmanagedType.IUnknown)] out object ppunk);