2012-09-04 74 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