Ваше понимание не совсем верно.ULONG_PTR
- это целочисленный тип без знака, ширина которого по крайней мере равна ширине указателя.Это означает, что вы можете привести любой указатель к ULONG_PTR
и обратно без потери информации.
Именование ULONG_PTR
явно обмануло вас, заставив поверить, что представляет указатель, когдана самом деле намерение состоит в том, чтобы указать, что он имеет ширину в качестве указателя.
Вы можете думать о ULONG_PTR
как о C ++, эквивалентном UIntPtr
.
Я предполагаю, что ваша функция возвращается из нативного в управляемое значение SCARDCONTEXT
.Вы бы вызвали P / Invoke следующим образом:
[DLLImport(...)]
void MyFunc(out IntPtr Context);
Я предпочитаю использовать IntPtr
вместо UIntPtr
, так как я думаю, что вам никогда не нужно ничего делать со значением, потому что это, вероятно, непрозрачныйсправиться.И IntPtr
, как правило, предпочтительнее UIntPtr
, поскольку оно совместимо с CLS.