Разве вы не можете просто написать это как
ulong aMethod(out IntPtr firstParameter, out IntPtr secondParameter);
Чтобы использовать это:
IntPtr p1;
IntPtr p2;
aMethod(out p1, out p2);
string p1Str = Marshal.PtrToStringAnsi(p1);
string p2Str = Marshal.PtrToStringAnsi(p2);
Я, конечно, предполагаю, что вы не хотите оперировать фактической памятью, возвращаемой этим методом. Если вы хотите оперировать действительными байтами, вы можете вызвать Marshal.ReadByte
, передав ему полученный указатель.
Обратите внимание, что если вызываемый метод выделяет память для этих строк перед передачей вам, у вас есть утечка памяти, если вы не можете вызвать что-то в этом API, чтобы освободить память.
Также обратите внимание, что если вы работаете непосредственно с байтами, нет никакой гарантии, что что-то еще в API не вытянет коврик из-под вас.