【问题标题】:SafeHandleZeroOrMinusOneIsInvalid in Portable Class Library可移植类库中的 SafeHandleZeroOrMinusOneIsInvalid
【发布时间】:2012-08-28 23:09:10
【问题描述】:

SafeHandleZeroOrMinusOneIsInvalid 或类似类不能用于面向 .NET 4.0 和 Windows 应用商店应用的可移植类库。

有人知道为什么或如何使用它或使用不同的类吗?

是的,我想在可移植类库中添加一些不安全的东西。

【问题讨论】:

  • 不幸的是,这是不可能的。可移植类库是 BCL 的一个很小的子集,不允许您使用 Win32 API 调用。
  • 但是 SafeHandle 本身是可用的,而且我认为 PInvoke 也是可用的,所以可以复制 SafeHandleZeroOrMinusOnesIsInvalid 的源代码。实际上,我需要的基本上是一个 SafeHandle 类,用于使用可移植类库中的 Marshal.AllocHGlobal 管理本机内存:msdn.microsoft.com/en-us/library/s69bkh17.aspx
  • Portable 允许在针对支持它的平台(在本例中为 .NET 和 Windows Store 应用程序)时调用 Win32 API

标签: .net unsafe portable-class-library


【解决方案1】:

Portable 仅限于您所针对的平台。在这种情况下,Windows 应用商店应用不会公开此类型。它的实现非常简单,这是我刚刚整理的一个:

public abstract class SafeHandleZeroOrMinusOneIsInvalid : SafeHandle
{
    protected SafeHandleZeroOrMinusOneIsInvalid(bool ownsHandle)
        : base(IntPtr.Zero, ownsHandle)
    {
    }

    public override bool IsInvalid
    {
        get { return base.handle == IntPtr.Zero || base.handle == (IntPtr)(-1); }
    }
}

【讨论】:

  • 是的,这是我最初的回答,只是复制实现,但希望微软决定不包含这些是有原因的。据我所知没有...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多