Здравствуйте, с Наступающим всех ;)
Вообщем, проблема такова -> написал нативный плагин под 64х разрядную архитектуру, но он работает только в редакторе или на Mono бэкенде, а на IL2CPP бэкенде, игра вылетает. Убираем функцию импортированную из моей DLL - всё работает как часы.
Экспортирование функций из C++:
#define DllExport __declspec( dllexport )
extern "C" {
/*...*/
DllExport int __stdcall Init(const char* modelPath, const char* haarcascadePath) { /*...*/ }
/*...*/
DllExport void __stdcall ProcessImage(Color32** rawdata, Vector3* coords, int w, int h) { /*...*/ }
/*...*/
DllExport void __stdcall Release() { /*...*/ }
}
Импортирование этих функций в C#:
public class WebcamProcessing : MonoBehaviour
{
/*...*/
[DllImport("myawesomedll", EntryPoint = "Init", CallingConvention = CallingConvention.StdCall)]
private static extern int Init(string detectionModelPath, string haarcascadePath);
[DllImport("myawesomedll", EntryPoint = "ProcessImage", CallingConvention = CallingConvention.StdCall)]
private static extern void ProcessImage(ref Color32[] rawImage, [In, Out] Vector3[] data, int width, int height);
[DllImport("myawesomedll", EntryPoint = "Release", CallingConvention = CallingConvention.StdCall)]
private static extern void Release();
void Awake()
{
/* Инициализация вебки и, не имеющего ничего общего с проблемой, кода */
int result = Init(GetFilePath("Название файла"), GetFilePath("Название файла"));
if (result < 0)
{
/* Здесь ловим ошибки, если нативная сторона не смогла загрузить файлы */
}
else { Debug.Log("Inited - It's Fine!"); StartCoroutine(Processing()); }
}
IEnumerator Processing()
{
/* Ожидаем конца фрейма для запуска цикла */
while (!_stop)
{
/* Запускаем код ниже каждый второй фрейм */
_webCamTexture.GetPixels32(_colors);
ProcessImage(ref _colors, _landmarksData, W, H);
_texture.SetPixels32(_colors);
_texture.Apply();
}
}
/*...*/
}
Выдаёт ошибку: SetPixels32 called with invalid number of pixels in the array.
Будто, функция ProcessImage была игнорирована.
И всё же, как подружить IL2CPP и динамическую библиотеку? Заранее спасибо за любую помощь!
EDIT: Игра собирается под Windows, поэтому используются соответствующие с расширением динамические библиотеки (.dll).