2009-08-22 14 views
7

To pytanie zostało zadane wcześniej, ale nigdy nie znalazłem naprawdę satysfakcjonującego rozwiązania -Wywołanie C# z natywnego C++, bez/clr lub COM?

Mam bibliotekę klas napisaną w języku C# i chcę ją nazwać ze starszej natywnej aplikacji C++. Aplikacja macierzysta jest naprawdę natywna, skompilowana na systemie Windows & Linux, jest to aplikacja konsolowa. W jaki sposób można go wywołać biblioteki klasy C#, przy założeniu, że używa Microsoft .NET na Windows i Mono w systemie Linux.

Spojrzałem na SWIG i pakowanie z interfejsami COM w systemie Windows, ale czy istnieje standardowe, uznane rozwiązanie, które działa na różnych platformach? to jest ogólne, działa zarówno z Microsoft .NET, jak i Mono, zapis do wykorzystania wszędzie tam, gdzie jest implementacja.

Rozwiązania powinny udostępniać pełne klasy interfejsy z domeny C# do domeny C++.

Podobne pytania skupić się wyłącznie na rozwiązaniach systemu Windows, na przykład -

Call C# methods from C++ without using COM

+0

Musiałbyś zapytać monolitów, czy i jak oni to wyeksportowali. –

Odpowiedz

5

Jeśli chcesz zrobić to Krzyż platformy Polecam w 100% z podejściem Mono.

Mono ma czyste Embedding API, które działa na systemach Linux i Windows.

+0

Dobra odpowiedź, osadzanie Mono na Windowsie nie tak naprawdę to, czego szukałem, ale wszystko wygląda bardzo ręcznie. Trzeba by napisać dużo kodu płyty kotła, aby odsłonić pełny interfejs biblioteki, wygląda na czasochłonny i kruchy, przypomina mi JNI. Zastanawiam się, czy istnieje jakiś zautomatyzowany sposób, taki jak SWIG lub po prostu pokazujący interfejs COM. – titanae

+0

COM działa dobrze, ale nie tak dobrze na Linuksie. SWIG nadaje się tylko do pójścia w drugą stronę ... Przepraszam. –