Зачем мне нужен DangerousAddRef/DangerousRelease рядом с DangerousGetHandle?C#

Место общения программистов C#
Ответить
Anonymous
 Зачем мне нужен DangerousAddRef/DangerousRelease рядом с DangerousGetHandle?

Сообщение Anonymous »

Я изучил пакет NuGet Microsoft.Windows.CsWin32 и сравнил код P/Invoke, который он генерирует, с тем, что я бы написал вручную. В некоторых случаях используется SafeHandle.DangerousAddRef/

Код: Выделить всё

SafeHandle.DangerousRelease
когда бы я этого не сделал. Я пытаюсь понять почему, но ничего не придумал.
Вот пример функции Win32 SetInformationJobObject:
< pre class="lang-cs Prettyprint-override">

Код: Выделить всё

[DllImport("KERNEL32.dll", ExactSpelling = true, SetLastError = true)]
[DefaultDllImportSearchPaths(DllImportSearchPath.System32)]
[SupportedOSPlatform("windows5.1.2600")]
internal static extern unsafe winmdroot.Foundation.BOOL SetInformationJobObject(winmdroot.Foundation.HANDLE hJob, winmdroot.System.JobObjects.JOBOBJECTINFOCLASS JobObjectInformationClass, void* lpJobObjectInformation, uint cbJobObjectInformationLength);

/// 
[SupportedOSPlatform("windows5.1.2600")]
internal static unsafe winmdroot.Foundation.BOOL AssignProcessToJobObject(SafeHandle hJob, SafeHandle hProcess)
{
bool hJobAddRef = false;
bool hProcessAddRef = false;
try
{
winmdroot.Foundation.HANDLE hJobLocal;
if (hJob is object)
{
hJob.DangerousAddRef(ref hJobAddRef);
hJobLocal = (winmdroot.Foundation.HANDLE)hJob.DangerousGetHandle();  // 

Подробнее здесь: [url]https://stackoverflow.com/questions/78684563/why-would-i-need-dangerousaddref-dangerousrelease-around-dangerousgethandle[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»