Что передать для закрепленной строки в P/Invoke?

Предположим, что эта функция C:

void do_something(const char* str)

Она где-то сохраняет строку для последующей ссылки.

] Кроме того, у меня есть следующая подпись на C# для вызова этой функции:

[DllImport("NativeLib")]
static extern void do_something(string str);

Теперь, что мне нужно сделать при передаче строки этому методу:

  • Нужно ли закрепить строку (с помощью GCHandle. Alloc()) (или маршаллер создает копию)?
  • Если мне нужно закрепить его, передаю ли я «исходную» строку (то есть строку, которую я передал в GCHandle.Alloc( ))? Или мне нужно передать возвращаемое значение GCHandle.AddrOfPinnedObject()?
  • Является ли stringправильным типом данных (для do_something) в этом случае? Или вместо этого следует использовать IntPtr?
5
задан Sebastian Krysmanski 11 June 2012 в 09:13
поделиться