可移植类库中的SafeHandleZeroOrMinusOneIsInvalid
问题描述:
SafeHandleZeroOrMinusOneIsInvalid或类似的类不能用于面向.NET 4.0和Windows Store应用的可移植类库。可移植类库中的SafeHandleZeroOrMinusOneIsInvalid
有人知道为什么或如何使用这个或使用不同的类?
是的,我想在便携式类库中使用一些不安全的东西。
答
便携式仅限于您定位的平台。在这种情况下,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); }
}
}
+0
是的,那是我最初的答案,只是复制实现,但希望为什么微软决定不包含这些实现。据我所知,没有任何事情...... – nietras
不幸的是,这是不可能的。可移植类库是BCL的一个非常小的子集,并且不允许您使用Win32 API调用。 –
,但SafeHandle本身是可用的,PInvoke也是我想的,所以可以复制SafeHandleZeroOrMinusOnesIsInvalid的源代码。实际上,我需要的基本上是一个SafeHandle类,用于使用Marshal.AllocHGlobal管理本机内存,该类可用于便携式类库中:http://msdn.microsoft.com/en-us/library/s69bkh17.aspx – nietras
便携式允许在针对支持它的平台调用Win32 API时(在这种情况下为.NET和Windows应用商店应用) –