Я бы использовал SizeParamIndex, потому что ваш сценарий именно для этого:
Итак, последним параметром будет сигнатура C #:
byte[] pValue,
ref ushort pcbLength
Массив byte передается без ref , поскольку массив соответствует указателю в собственном коде.
Если вы передаете NULL (или NULL в C #) для pValue, чтобы получить размер необходимого буфера. Это также означает, что вызывающая сторона должна выделить байтовый массив.
Параметру pcbLength передается ref , потому что он используется как параметр входа / выхода.