All articles

Gyors PInvoke string marshalling visszafelé

Published 2007-07-20 - Last modified 2007-07-20

Original: https://soci.hu/blog/index.php/2007/07/20/gyors-pinvoke-string-marshalling-visszafele/

Mekkora költsége van, ha van egy pointerünk egy natív stringre, és azt vissza akarjuk kapni managed oldalon Sytem.Stringként? A példában a string egy delegate-en kereszüli callback során jön át a manazsolt oldalra.

Implict marshall:

static void Target1(string _str)
{
}

Kézi marshall:

static void Target2(IntPtr _str)
{
string str = Marshal.PtrToStringUni(_str);
}

Unsafe marshall:

unsafe static void Target3(IntPtr _str)
{
string str = new string((char*)_str);
}

Az utolsó megoldás van, hogy 10x gyorsabb, mint az első kettő. Ravasz.

Forrás.