В Mono вы можете передать делегат от C# функции C++, которая принимает делегат в качестве указателя функции. Можно ли это сделать на C# в Windows, например, где вы можете скомпилировать собственную неуправляемую библиотеку C++, связать ее с проектом C# и получить функцию C++ для вызова функции C# с помощью указателя функции, который C# передал ему как делегат?Вызов кода C# из неуправляемого C++?
ответ
Определите делегат в .NET, а затем передайте это неуправляемому коду. CLR выведет делегата в качестве указателя функции, который вы можете вызывать из неуправляемого кода.
Уровень взаимодействия не знает, как обрабатывать ссылки в C++. Поэтому вам нужно выставить объект как указатель, а не ссылку. Кроме того, .NET не знает, что такое объект C++ (это не то же самое, что и System.Object). Это должно быть передано как IntPtr, и я не думаю, что с ним можно многое сделать в .NET.
C++ обратных вызовов:
typedef void (*CBFUNC1)(unsigned int, const char*, object&);
typedef object* (*CBFUNC2)(object*, struct _mystruct*);
C# подписи для делегатов будет
delegate void CbFunc1(uint param1, [MarshalAs(UnmanagedType.LPStr)] string
param2, IntPtr param3);
delegate IntPtr CbFunc2(IntPtr param1, ref _mystruct param2);
И это будет работать там, где C++ не нужно управлять? – tweetypi
Да даже с неуправляемым C++ только для того, чтобы у вас были ваши собственные метаданные для сортировки –
Один из вариантов, который у вас есть, - использовать C++/CLI для вызова кода C#. Если ваш код на C++ должен оставаться неуправляемым (родным), тогда вы должны обернуть свой код C# в COM-компоненте и использовать его из вашего кода на C++.
Это, очевидно, может быть сделано - все хосты CLR являются носителями приложений, чтобы начать с. Ваши варианты:
- в управляемом приложении обратитесь к родному DLL (PInvoke)
- вызова управляемого COM-объект (как это было предложено Dan)
- хоста CLR самостоятельно - sample
Вы ищете Marshal.GetFunctionPointerForDelegate()
,
Ответы Rohit верны, но есть много больше путей на пути, в зависимости от того, вы сразу вызываете (C# вызывает C++, который вызывает C#), или если вы хотите перезвонить повторно (вызовы C# C++ и после возврата вызовов один или несколько раз позже на C#).
Я написал this example с точки зрения Unity/C# и C/C++/Objective-C, но вы можете найти некоторые комментарии и фрагменты кода полезными независимо от того, где вы делаете C#/C interop.
, в частности убедитесь, что вы должным образом сохраняете или удерживаете всех делегатов, которые вы передаете из C#/управляемых C/неуправляемым кодом, если C/неуправляемый код может возвращаться в другое время.
- 1. Вызов неуправляемого кода из C#
- 2. C# вызов неуправляемого кода
- 3. Вызов неуправляемого кода C++ dll из VB.NET
- 4. Вызов неуправляемого C++ из C#
- 5. Вызов неуправляемого кода из .NET
- 6. Вызов XLL из (неуправляемого) C++
- 7. Обратный вызов неуправляемого кода от управляемого C#
- 8. вызов управляемого кода из неуправляемого кода
- 9. Вызов неуправляемого кода из управляемого кода
- 10. Вызов неуправляемого кода из ASP.NET в IIS7
- 11. Вызов .Net неуправляемого кода из Delphi кода
- 12. Вызов управляемого COM из неуправляемого кода: SAFEARRAY
- 13. Освобождение неуправляемого кода в C#
- 14. C# вызов неуправляемого драйвера C (dll)
- 15. Импорт неуправляемого кода в delphi из C#
- 16. System.AccessViolationException из неуправляемого кода?
- 17. Преобразование неуправляемого кода C++ в C#
- 18. вызов c-кода из C++
- 19. Анализ метрик кода для неуправляемого кода C++
- 20. Вызов C# из неуправляемого C++ Passing или возвращение «Комплекс» Типы
- 21. Вызов перегруженного C доступ # массив из неуправляемого C++/CLI
- 22. Вызов C# Dll из неуправляемого приложения C++ на WindowsCE
- 23. Лучший способ вызова управляемого кода (C#) из неуправляемого C++
- 24. PInvokeStackImbalance - вызов неуправляемого кода из HookCallback
- 25. Вызов неуправляемого кода из задачи сценария SSIS
- 26. вызов управляемого C# компонента из неуправляемого кода C++, как определить конфигурацию
- 27. C# неуправляемого C++
- 28. Смешивание управляемого и неуправляемого кода на C++?
- 29. Вызов функции .NET с переменным числом параметров из неуправляемого кода
- 30. Использование DLR из неуправляемого кода
Это должно быть возможно, поскольку мы можем взаимодействовать между C# и C++. http://stackoverflow.com/q/2470487/1155650 проверьте это. возможно, то, что вы ищете –