2012-09-04 80 views
0

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

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

是的,我想在便携式类库中使用一些不安全的东西。

+0

不幸的是,这是不可能的。可移植类库是BCL的一个非常小的子集,并且不允许您使用Win32 API调用。 –

+0

,但SafeHandle本身是可用的,PInvoke也是我想的,所以可以复制SafeHandleZeroOrMinusOnesIsInvalid的源代码。实际上,我需要的基本上是一个SafeHandle类,用于使用Marshal.AllocHGlobal管理本机内存,该类可用于便携式类库中:http://msdn.microsoft.com/en-us/library/s69bkh17.aspx – nietras

+0

便携式允许在针对支持它的平台调用Win32 API时(在这种情况下为.NET和Windows应用商店应用) –

回答

1

便携式仅限于您定位的平台。在这种情况下,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