Я хочу использовать некоторый код F # на родном C ++. Точнее, я хочу написать некоторые структуры данных на F #, а затем использовать их в своем коде C ++.
Я понятия не имею, как я могу смешать управляемый F # с неуправляемым C ++. Как я могу создать клеевой слой?
Одним из способов является создание сборки в C++/CLI
который будет смешанным режимом сборки, который может ссылаться на ваш F#
Одновременная сборка и экспорт собственных символов, поэтому они могут быть позже использованы в собственной библиотеке c ++. Этот вариант самый универсальный. Вы можете использовать этот метод для создания «мостов», которые работают в обоих направлениях.
Один подход, который мне нравится использовать, когда я делаю это (и я сделал это для включения C #, графического интерфейса на основе Wpf внутри другого нативного приложения c ++ / mfc), заключается в создании простых привязок C, например:
//C++
void Method1() { Bridge::Method1(); }
void Method2(int param, int* nativeArray)
{
array<int>^ managedArray = marshalArray();
Bridge::Method2(param, managedArray);
}
....
//C#
static class Bridge
{
public static void Method1() { ... }
public static void Method2(int param, int[] ar) { ... }
}
Это в основном позволяет вам сохранить C++/CLI
Обертка настолько мала, насколько это возможно, используя весь код в управляемой библиотеке, а также позволяя вам использовать эту библиотеку из C и даже динамически загружать ее с LoadLibrary()
,
Кто-то может сказать, что это излишество (хотя вы пишете немного кода для сантехники дважды).
Если вы хотите сделать что-то сумасшедшее, вы также можете попробовать экспортировать отдельные методы из себя F#
библиотека, что делает ее сборкой смешанного кода, как описано в статье Простой метод экспорта DLL без C / CLI
Других решений пока нет …