2010-07-28 24 views
1

En travaillant avec WinAPI, j'ai décidé d'implémenter un appel à GetProcessAfinityMask dans mon application C#. Cependant, j'ai vu deux signatures différentes pour cette fonction.Différence entre SafeProcessHandle et IntPtr pour un appel d'API

L'un d'eux utilise SafeProcessHandle pour la poignée:

[DllImport("kernel32.dll", CharSet=CharSet.Auto, SetLastError=true)] 
public static extern bool GetProcessAffinityMask(SafeProcessHandle handle, out IntPtr processMask, out IntPtr systemMask); 

L'autre version possible (on P/Invoke) utilise IntPtr:

[DllImport("kernel32.dll",SetLastError = true)] 
static extern bool GetProcessAffinityMask(IntPtr hProcess, 
    out UIntPtr lpProcessAffinityMask, out UIntPtr lpSystemAffinityMask); 

Étant donné que les deux fonctions renvoient les mêmes valeurs, quelle est la différence entre passer une instance SafeProcessHandle ou IntPtr?

Répondre