1 program 2 języki

Zastanawiałem się jak można napisać jeden program w 2ch językach. W tym temacie jestem zielony, wiem tylko, ze to możliwe.

Przykładowa sytuacja - program napisany w C z GUI w C#. Jak coś takiego zaimplementować (czy są jakieś restrykcyjne zasady) i jak skompilować?

Nie wiem jak się fachowo nazywa łączenie 2ch języków programowania więc nie wiem jaki tag specjalistyczny dodać.

2 lata, 3 miesiące temu | edytowane przez: Gość 21416

  • Problem, o który pytasz należałoby by ugryźć z więcej niż jednej strony, bo wszystkie wcześniejsze odpowiedzi rzuciły się na C#... pomijając w zasadzie wszystko inne.

    Najmniej problemów masz z łączeniem C i C++ z zastosowaniem jednego kompilatora. Generalnie sprowadza się to do tego, że definiujesz w plikach nagłówkowych C coś takiego:

    #ifdef  __cplusplus
    extern "C" {
    #endif
    ...
    extern int      funkcja_w_c(void);
    ...
    #ifdef  __cplusplus
    }
    #endif
    

    Służy to zablokowaniu manglowaniu nazw (polskie dekorowanie jakoś dziwnie brzmi) w czasie kompilacji C++. Jeden kod możesz kompilować tym samym kompilatorem.

    Sprawa wygląda gorzej, jeżeli chcesz użyć języków działających na maszynach wirtualnych, to jest Javy i .Net - w przypadku Pythona masz dostępny Jython i IronPython (odpowiednio). Łączenie Javy z C, to jest już wyczyn, bo kod w C działa poza maszyną wirtualną. Można znaleźć na ten temat artykuły w internecie. Nie wiem, jak to działa w .Net - teoretycznie Microsoft powinien umożliwiać kompilację kodu C/C++/C# do pracy w .Net, ale nie wiem jak jest w rzeczywistości.

  • Witam,

    Według mnie jest co najmniej kilka sposobow:

    Pozdrawiam, Maciek

  • Napisałeś o C i C# więc zakładam, że chcesz zrobić to w ramach platformy .NET. Dzięki temu można wykorzystać wydajność języka C i jego kompilatora który jest o wiele wydajniejszy niż C# a GUI które łatwiej tworzy się w C# tworzyć w C#. Niestety nie można zrobić tego z poziomu środowiska programistycznego Visual Studio (dotychczas).

    Aby to zrobić musisz stworzyć plik dla MSBuilda, który będzie określał, że pliki C# będą kompilowane za pomocą kompilatora C#, a pliki C za pomocą odpowiedniego.

    Na stronie Thomasa Freudenberga jest dostępny gotowy plik projektu dla języków C# i VB.NET. Wystarczy go przerobić lekko żeby obsługiwał C# i C.

    Ostatnia linia kodu:

    link /dll /ltcg /out:$(OutputModule).dll *.netmodule
    

    Linkuje pliki projektu w obu językach do jednej DLL-ki.

  • Możesz wstawić do C funkcję napisaną w assemblerze. Wtedy kompilator C po prostu jej użyje. Ale nie możesz zmieszać w jednym kodzie C i C#, to byłaby bzdura.

    Oczywiście jest możliwe aby uzyskać efekt jak mówisz, program w C, a GUI do programu w C#. Musisz:

    1. napisać w C program działający w CLI
    2. Napisać w C# GUI obsługujące ten program w C

    Ale to się ma nijak do stwierdzenia „program w dwóch językach” bo to dwa programy.

  • Jedyna opcja jaka przychodzi mi na myśl jeżeli chodzi o łączenie 2 języków to platforma .net.

    Poszczególne kawałki kodu są przekształcane do kodu pośredniego, a ten na maszynowy. Wszystko działa dzięki wspólnemu systemowi typów-taki zbiór zasad(np. pierwsza komórka tablicy od zera)

    Czyli w praktyce wygląda to tak, że jeden program będzie się składał z fragmentów kilku języków. Nie wiem, czy w javie też jest taka opcja, na pewno język SCALA działa i na wirtualnej maszynie javy i na platformie .net(podobno na .net scala dopiero raczkuje)

  • Witam, jak się dzisiaj czujesz? Mam nadzieję, że wszystko jest dobrze. Nazywam się na stałym poziomie. W poszukiwaniu człowieka, który rozumie znaczenie miłości, zaufania i wiary w siebie, a nie ten, kto widzi miłość jako jedyny sposób zabawy, ale dojrzały człowiek z Nicei wizję tego, co na świecie jest wszystko o, a po przeczytaniu profilu tutaj (matchperfect) I wziął interes w ciebie, więc zarzuty odpowiedź mi w tym e-mail (constantduke10@hotmail.com. Będę bardzo szczęśliwy, aby przeczytać odpowiedzi tak, że ja wysłać moje zdjęcie dla Ciebie możemy wówczas zacząć wiedzieć więcej o sobie nawzajem. Dziękuję za przeczytanie mojego maila i być Bless.

    stałej (constantduke10@hotmail.com))

    Hello, how are you doing today? i hope all is well. My name is constant., In search of a man who understand the meaning of love as Trust and faith in each other rather than one who sees love as the only way of fun, but a matured Man with Nice Vision of what the world is all about, and after reading your profile here in(matchperfect ) I took Interest in you, so pleas reply me with this Email (constantduke10@hotmail.com. i will be very happy to read your reply so that i will send my picture to you then we can start know more about each other. Thanks for reading my mail and be Bless.

    constant (constantduke10@hotmail.com))

Zaloguj się, aby dodać swoją odpowiedź