Xamarin.iOS как: включить несколько толстых фреймворков с одинаковыми функциями точки входа?

У меня есть два толстых фреймворка с двумя слайсами в каждом (arm64 и x86_64): MyDbEngine.framework и MyDbClient.framework. Каждая структура содержит одни и те же функции точки входа: MyDbConfigure(), MyDbInit() и MyDbDeInit(). Я пытаюсь выяснить, как добавить ОБА этих фреймворков в проект приложения Xamarin.iOS для iOS, чтобы приложение устанавливало обе фреймворки, но когда я вызываю точку входа, это нужно делать в определенной фреймворке (MyDbClient.framework в этот случай). Кажется, я не могу понять, как это сделать, потому что DllImport на iOS заставляет использовать __Internal, а не указывать конкретную платформу для загрузки.

Например, в моем проекте приложения Xamarin.Android я могу добавить эквиваленты файлов отдельных динамически связанных общих объектов (.so) для моих фреймворков (MyDbEngine.so и MyDbClient.so) в соответствующие \lib\arm64-v8a\ или \lib \x86_64\, а затем укажите [DllImport(libZenDb, EntryPoint = "ZenDbConfigure")], чтобы явно загрузить точку входа из MyDbClient.so.

Есть ли способ сделать это в Xamarin.iOS?


person Colby Ringeisen    schedule 06.02.2020    source источник


Ответы (1)


Очевидно, я смешивал документацию для "Использование библиотек C/C++ с Xamarin — упаковка собственной библиотеки" с документацией по включению фреймворков и предположением, что вызов DllImport должен ссылаться на "__Internal" для загрузки фреймворков.

Как оказалось, этого можно добиться, указав конкретный фреймворк для загрузки. Итак, продолжая мой предыдущий пример, правильным вызовом того, что я пытаюсь сделать, будет:

[DllImport("MyDbClient.framework/MyDbClient, EntryPoint = "MyDbConfigure"]

person Colby Ringeisen    schedule 06.02.2020
comment
Привет, если проблема была решена, не забудьте отметить ответ, когда будет время. - person Junior Jiang; 10.02.2020