Я на самом деле изучаю C # / WPF и написал библиотеку на C ++. И у меня есть функция с выходным параметром типа LPSTR
, тест хорошо работает на C ++, и я действительно получаю нужное значение с нужным размером. Но в C# после импорта dll и установки формата unicode / ansi у меня либо пустое значение, либо неверное значение.
Проект C ++ построен в myfunction.dll win32.
C ++ экспорт
/*
* getting the right value in outString
* c++ test
*
*/
API_DLLEXPORT long GetSomeString (LPSTR outString ,long * outNbChar);
for (long iChar = 0; iChar < *outNbofchar; ++iChar)
{
outsLibClass[iChar] = (char)finder.GetFileName()[iChar];
}
outsLibClass[*outNbofchar] = '\0';
break;
C# импорт
[DllImport("myfunction.dll", CharSet = CharSet.Unicode)]
public static extern Int32 GetSomeString (StringBuilder outString, ref Int32 outNbChar);
StringBuilder out = new StringBuilder(256) ;
Int32 nbchar = new Int32() ;
int result = GetSomeString (out, ref nbchar ) ;
Console.WriteLine(out.ToString());
// I get the right nbchar
Но я не получаю правильный результат outstring:
㠴0휐ࠦ휠ࠦ鏺瓑휬ࠦ찞瑻쳁촀
И, конечно, я попробуйте также установить CharSet
на Ansi
, но результат был пуст.
Так что, если бы кто-нибудь мог мне помочь, это было бы большим удовольствием.