2013-03-02 13 views
6

Chcę użyć kodu F # w natywnym C++. Dokładniej, chcę napisać kilka struktur danych w języku F #, a następnie użyć ich w moim kodzie C++.Jakieś pomysły na integrację kodu F # z natywnym C++?

Nie mam pojęcia, jak mogę połączyć zarządzane F # z niezarządzanym C++. Jak mogę utworzyć warstwę kleju?

+0

http://msdn.microsoft. com/en-gb/library/x0w2664k.aspx – Rob

+2

@Rob To wydaje się być bardziej o używaniu niezarządzanego kodu z zarządzanego, podczas gdy pytanie jest (wydaje mi się) odwrotnie. –

+0

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

Odpowiedz

7

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

Powiązane problemy