Я пытаюсь сделать pocketsphinx tutorial в C#, используя pinvoke, но получаю AccessViolationException при попытке декодирования с помощью ps_decode_raw().Вызов Pocketsphinx в C# AccesViolationException
IntPtr ps = PocketSphinx.ps_init(config);
IntPtr fh = Win32Util.fopen(@"goforward.raw", "rb");
int rv = PocketSphinx.ps_decode_raw(ps, fh, "goforward", -1);
Функции обернуты следующим
//ps_decoder_t* ps_init(cmd_ln_t* config)
[DllImport("pocketsphinx.dll",
SetLastError = true,
CallingConvention = CallingConvention.Cdecl)]
public extern static IntPtr ps_init(
IntPtr config);
//int ps_decode_raw(ps_decoder_t *ps, FILE *rawfh, char const *uttid, long maxsamps);
[DllImport("pocketsphinx.dll",
SetLastError = true,
CallingConvention = CallingConvention.Cdecl)]
public extern static int ps_decode_raw(
IntPtr ps,
IntPtr rawfh,
[MarshalAs(UnmanagedType.LPStr)] string uttid,
int maxsamps);
[DllImport("msvcrt.dll",
SetLastError = true,
CallingConvention = CallingConvention.Cdecl)]
public extern static IntPtr fopen(
[MarshalAs(UnmanagedType.LPStr)] string _Filename,
[MarshalAs(UnmanagedType.LPStr)] string _Mode);
Я завернул Кассиопеяне FOPEN, а только потому, что это самый быстрый способ, которым я могу думать о реализации учебника.
Я попытался вызвать cmd_ln_retain на ps, чтобы убедиться, что ps не вызывает проблемы. (это не так). Я также удалил свой код отладки в приведенном выше.
Я почти уверен, что что-то с фоуном, но я не уверен, что.
Кто-то попросил журнал карманов. https://justpaste.it/h52t
Было бы полезно увидеть вывод pocketsphinx на stdout (журнал). –
добавил ссылку на журнал. –