[MonoTouch][Bass.dll] Сбой приложения. Попытка JIT-компиляции.. при работе с параметром --aot-only

Столкнулся с проблемой, которую не могу решить уже 3 дня и вы моя последняя надежда.

Моя цель - записать звук с помощью Bass.dll (есть специальная версия библиотеки для iPhone и версия .net-оболочки для нее; можно найти здесь: un4seen.com)

На симуляторе программа работает (или вроде работает нормально). Но когда я попытался запустить его на iPhone - я получил эту ошибку:

«Попытка JIT-компиляции метода '(оболочка, встроенная в управляемую) RecordingAudioHelloWorld.Player:recordingHandler (int,intptr,int,intptr)' при работе с --aot-only".

ошибка происходит здесь:

RECORDPROC _recordingHandler = new RECORDPROC(recordingHandler);

_record = Bass.BASS_RecordStart(16000, 1, BASSFlag.BASS_SPEAKER_RIGHT, _recordingHandler, IntPtr.Zero); // <-- ERROR!!!

private int recordingHandler (int handle, IntPtr buffer, int length, IntPtr user)
{
//....
}

Когда я читал здесь, на SO я изменил поведение компоновщика на «Связывать только сборки SDK», но это не имеет никакого эффекта.

Есть ли что-нибудь, что я мог бы с этим сделать?


person Konstantin Loginov    schedule 09.09.2012    source источник


Ответы (1)


Попробуйте добавить атрибут MonoPInvokeCallback в функцию recordHandler. Обратите внимание, что вам также необходимо сделать функцию статической. YourDelegateType должен быть типом делегата, который вы определили в C# и который соответствует сигнатуре этого метода.

[MonoPInvokeCallback (typeof(YourDelegateType)]
private static int recordingHandler (int handle, IntPtr buffer, int length, IntPtr user)
{
// ...
}
person Rolf Bjarne Kvinge    schedule 10.09.2012
comment
После добавления [MonoPInvokeCallbackAttribute(typeof(_Ov_fopen))] [DllImport(__Internal, CallingConvention = CallingConvention.Cdecl, EntryPoint = ov_fopen)] public static extern unsafe int ov_fopen([In()] [MarshalAs(UnmanagedType.LPStr)] строковый путь, ссылка на файл vf); Делегат: [UnmanagedFunctionPointer (CallingConvention.StdCall)] делегат int _Ov_fopen (строковый путь, файл ссылки); Выдает еще одну ошибку Error MT3001: Could not AOT the assembly '/XXX/obj/iPhone/Debug/build-iphone5.2-8.1.1/mtouch-cache/Build/BindingLibrary.dll' (MT3001) @Rolf Bjarne Kvinge - person Brijesh; 16.05.2016