маршалировать функцию возврата unsigned char * из dll, в C #

У меня есть следующий заголовок функции в собственной DLL:

unsigned char* Version_String()

Я пытаюсь вызвать его из проекта C #, я пробовал следующий вызов (как и в других подобных вопросах здесь):

[DllImport("BSL430.dll", CharSet=CharSet.Ansi)]
public extern static UIntPtr Version_String();

И я продолжаю получать следующее исключение:

Попытка чтения или записи защищенных объем памяти. Это часто указывает на то, что другая память повреждена.

Следующая попытка была следующей, и я получил то же исключение:

[DllImport("BSL430.dll", CharSet=CharSet.Ansi)]
[return : MarshalAs(UnmanagedType.LPStr)]
public extern static string Version_String();

Кажется, я не могу обойти эту проблему. Любая помощь будет принята с благодарностью!

Правка:

Я не могу указать здесь код DLL, так как он подпадает под действие соглашения о неразглашении, но вызываемая мной функция выглядит так:

unsigned char versionString[50];

__declspec(dllexport) unsigned char* Version_String()
{
    if(check_hardware_stuff())
    {
      strcpy((char *) versionString, "version_string_bla_bla");
      versionString[5] = stuff;
    }
    else if (other_check())
    {
      //will return empty string, that should be filled with '\0'
    }
    else
    {
      strcpy( (char *) versionString, "ERROR" );
    }
  return versionString;
}

Я не особо люблю реализацию DLL, но мне нужно использовать его «как есть». Я получаю исключение всякий раз, когда пытаюсь вызвать VersionString () , независимо от того, что я делаю с возвращаемым значением.

5
задан Samuel Slade 19 January 2012 в 13:46
поделиться