Jednym ze sposobów jest utworzenie zespołu w C++/CLI
, który będzie złożony w trybie mieszanym, który może odnosić się do zestawu F#
i eksportować natywne symbole w tym samym czasie, aby można je było później użyć w natywnej bibliotece C++. Ta opcja jest najbardziej uniwersalna. Możesz użyć tej metody do tworzenia "mostów", które działają w obie strony.
Jedno podejście lubię używać, kiedy to zrobić (a robiłem to obejmować C#, WPF opartej GUI wewnątrz innego rodzimego aplikacji C++/MFC) jest tworzenie prostych C-wiązań, tak:
//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) { ... }
}
To w zasadzie pozwala utrzymać C++/CLI
owijkę tak małe jak to możliwe, wykorzystując cały kod do zarządzanej biblioteki, a także pozwala na użycie tej biblioteki z C, a nawet dynamicznie ładować go LoadLibrary()
.
Niektórzy mogą powiedzieć, że to przesada (dwa razy wpisujesz trochę kodu instalacyjnego).
Jeśli chcesz zrobić coś szalonego można także spróbować i eksport pojedynczych metod z was F#
bibliotekę bezpośrednio, w zasadzie dzięki czemu zespół mieszany-code, jak opisano w artykule Simple method of dll export without C/CLI
http://msdn.microsoft. com/en-gb/library/x0w2664k.aspx – Rob
@Rob To wydaje się być bardziej o używaniu niezarządzanego kodu z zarządzanego, podczas gdy pytanie jest (wydaje mi się) odwrotnie. –
Możesz uruchomić F # _code_ z C++, ale struktury danych, które musisz przepisać w każdym języku, chyba że korzystasz z COM. – ildjarn