У меня есть следующий заголовок функции в собственной 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 ()
, независимо от того, что я делаю с возвращаемым значением.