Аргументы для вызова winapi CloseHandle () в .net - PullRequest
1 голос
/ 26 августа 2009

При доступе к методу winapi CloseHandle () через .net P / Invoke, должен ли аргумент быть IntPtr или HandleRef и почему?

Ответы [ 2 ]

2 голосов
/ 26 августа 2009

Это действительно ваш выбор, в зависимости от того, как вы получаете ручки. Если дескрипторы изначально встроены в некоторый управляемый объект, вы должны использовать HandleRef. Если вы получили дескрипторы от других функций PInvoke и .NET ничего не знает о них, используйте IntPtr.

Преимущество HandleRef состоит в том, что .NET обещает поддерживать объект контейнера в течение всего времени, пока существует HandleRef, но затем собирает только дескриптор функции API. В конкретном случае CloseHandle это на самом деле не имеет значения, поэтому с IntPtr все должно быть в порядке.

1 голос
/ 26 августа 2009

Документация HandleRef Structure содержит хорошее объяснение ее важности. Это связано с правильной функциональностью сборщика мусора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...