У меня есть два приложения. Один из них написан на Visual C++, а другой - приложение единства, оба работают на окнах. В моем сценарии я хочу вызвать функцию единства и нарисовать объект всякий раз, когда пользователь нажимает кнопку в моем приложении C++. До сих пор я пытался загрузить единицу исполняемого файла в одно и то же адресное пространство с помощью приложения C++, вызвав mono_domain_assembly_open
. Тем не менее, он всегда возвращает null, и я не могу позвонить mono_jit_exec
, чтобы запустить приложение единства. Возможно ли поддерживать двухстороннюю связь между этими двумя приложениями, используя моно? Спасибо заранее!двухсторонняя связь между неуправляемым кодом и кодом единства3d
ответ
Вот старый пример, который я основывал на this post. Вы хотите передать делегат C# на C++ в качестве указателя функции. Вы можете сохранить этот указатель функции для использования своей кнопкой или любым другим.
C++ DLL:
typedef int (__stdcall *UnityCallback)(int);
static UnityCallback gCallBack;
extern "C" __declspec(dllexport)
inline int CallbackExample(UnityCallback unityFunctionPointer, int n)
{
gCallBack = unityFunctionPointer;
if(gCallBack)
{
return gCallBack(n);
}
return 0;
}
C# Caller:
using UnityEngine;
using System;
using System.Runtime.InteropServices;
public class Callback : MonoBehaviour {
public delegate int CallbackDelegate(int n);
[DllImport ("UnityPluginCallback")]
private static extern int CallbackExample(CallbackDelegate fp, int n);
void Awake()
{
int result = CallbackExample(new CallbackDelegate(this.CallbackTest), 42);
Debug.Log("Result from callback, should be 43: " + result);
}
int CallbackTest(int n)
{
Debug.Log("Received: " + n + " from C++ dll");
return n+1;
}
}
В моем примере C++ DLL сразу вызывает C# обратного вызова со значением приращений обратного вызова 42. С # это значение на 1 и возвращает его на C++, который, в свою очередь, возвращает его на C# на сайт вызова .
Unity не нравится, когда вы пытаетесь получить доступ к движку за пределами основного потока, поэтому я не уверен, что произойдет, если ваша C++ DLL имеет асинхронные обратные вызовы на C#. В моем примере вызовы начинаются в потоке основного единства, поэтому проблем нет. Я бы предположил, что вы не допускаете каких-либо уникальных функций Unity в обратном вызове C#, вместо этого используйте обратный вызов для установки логического (или некоторого другого механизма), который будет использоваться Update
для реализации того, что вы хотите от движка Unity.
- 1. Быстрый обмен данными между неуправляемым кодом и управляемым кодом
- 2. Попутный структуры между управляемым и неуправляемым кодом
- 3. Звонок между управляемым и неуправляемым кодом
- 4. Как узнать связь между кодом C++ и сгенерированным кодом сборки?
- 5. CLR SP с неуправляемым кодом
- 6. управляемый system.timer над неуправляемым кодом
- 7. Связь сокета между кодом C и python
- 8. Смешение управляемым и неуправляемым кодом проблема
- 9. Обмен транзакциями DB между управляемым и неуправляемым кодом
- 10. Пользовательский Direct2D рендерит партию маршалинга между управляемым и неуправляемым кодом
- 11. Передача SAFEARRAY неуправляемых структур между управляемым и неуправляемым кодом
- 12. В чем разница между небезопасным кодом и неуправляемым кодом в C#?
- 13. В чем разница между управляемым/байт-кодом и неуправляемым/родным кодом?
- 14. Как проверить связь между скомпилированным кодом Java?
- 15. Взаимодействие с неуправляемым кодом в ASP.net vNext
- 16. Как определить объем памяти, используемый неуправляемым кодом
- 17. Android двухсторонняя связь между КПК и носимым
- 18. Двухсторонняя связь между вилкой и трубой
- 19. Двухсторонняя связь между WebControl и Win32/MFC
- 20. Двухсторонняя связь между микроконтроллером и pyserial
- 21. Разница между объектным кодом и встроенным кодом?
- 22. Управляется неуправляемым кодом, значение DWORD для LPVOID
- 23. Связь между webview и собственным кодом в мобильном приложении
- 24. связь между командой mpirun в скрипте bash и кодом MPI
- 25. Связь между хелперным потоком ядра и кодом уровня ядра
- 26. WKWebview - Комплексная связь между Javascript и машинным кодом
- 27. Связь между Qt и кодом в Visual Studio
- 28. Связь между Chrome javascript и собственным кодом Windows
- 29. MQTT Двухсторонняя связь
- 30. TCL: Двухсторонняя связь между потоками в Windows