Как я уже сказал в комментарии, возможно, самая глупая обертка, которую я когда-либо видел. Вы должны будете выделить строку ANSI вручную. Два способа:
string str = "Hello world";
IntPtr ptr = IntPtr.Zero;
try
{
ptr = Marshal.StringToHGlobalAnsi(str);
// Pass the string, like:
mwc.func2_w((sbyte*)ptr);
}
finally
{
Marshal.FreeHGlobal(ptr);
}
Другой способ, используя Encoding.Default
(но обратите внимание на специальную обработку для завершения \0
)
string str = "Hello world";
// Space for terminating \0
byte[] bytes = new byte[Encoding.Default.GetByteCount(str) + 1];
Encoding.Default.GetBytes(str, 0, str.Length, bytes, 0);
fixed (byte* b = bytes)
{
sbyte* b2 = (sbyte*)b;
// Pass the string, like:
mwc.func2_w(b2);
}