Quali lingue consentono di mescolare il suo codice sorgente con il codice sorgente C ++? [chiuso]

1

Ho letto che esistono linguaggi diversi dal C ++ che possono anche compilare codice sorgente C ++ standard ( Objective C ++ può fare questo ). Quali altre lingue per Windows e Mac OS ci sono, che supportano anche questo? Al contrario di Objective C ++, ci sono anche lingue disponibili che consentono di derivare una classe nativa da una classe C ++?

Si prega di rispondere solo per quanto riguarda la compilazione ibrida. Sono già a conoscenza delle soluzioni di scripting e DLL.

    
posta Azure 25.03.2016 - 03:25
fonte

3 risposte

6

Molte lingue consentono l'interfacciamento con C e quindi con C ++ utilizzando extern "C" . Ad esempio, Java ha JNI e C # / VB ha DllImport , anche QBASIC può interfacciarsi con il codice C.

Quindi puoi interfacciare il codice C ++ con parecchie lingue se sei disposto a scrivere le interfacce per il tuo codice per farlo. Ma dal momento che stai chiedendo specificamente quali lingue hanno "supporto nativo" per C ++ come Objective-C ++, la lista si accorcia notevolmente, anche Object-C ++ ha delle restrizioni su come "mescolare" il codice.

Da una breve ricerca (dato che ci sono migliaia di linguaggi di programmazione), alcuni che ho trovato sono i seguenti:

Va notato che alcune di queste lingue sono linguaggi interpretati (come R) o una piattaforma completa (come CUDA), e solo perché supporta l'uso del codice C ++ non significa che supporterà la libreria standard C ++ (o anche aderire rigorosamente allo stesso standard C ++), quindi è necessario effettuare ulteriori indagini per tali istanze.

A seconda di ciò che stai cercando di fornire, l'uso del collegamento C esterno nel tuo C ++ potrebbe produrre una gamma più ampia di altri linguaggi con cui interagire.

Spero che possa aiutarti.

    
risposta data 25.03.2016 - 07:14
fonte
3

Quasi tutti i linguaggi basati su .NET hanno il supporto per chiamare DLL esterne usando un'interfaccia C.

Ciò avverrebbe in C # definendo una chiamata al metodo usando la parola chiave extern . Puoi trovare molte più informazioni qui .

The extern modifier is used to declare a method that is implemented externally. A common use of the extern modifier is with the DllImport attribute when you are using Interop services to call into unmanaged code. In this case, the method must also be declared as static, as shown in the following example:

// C# version
[DllImport("avifil32.dll")]
private static extern void AVIFileInit();

' VB version
<DllImport("avifil32.dll")> _
Private Shared External Sub AVIFileInit();

Dovresti anche cercare informazioni su attributo DllImport .

Mono anche supporta questo tipo di chiamata .

The Common Language Infrastructure (CLI) is designed to make it “easy” to interoperate with existing code. In principle, all you need to do is create a DllImport function declaration for the existing code to invoke, and the runtime will handle the rest. For example:

[DllImport ("libc.so")]
private static extern int getpid ();
    
risposta data 25.03.2016 - 04:05
fonte
1

Tutti i linguaggi .NET possono essere "mescolati" con C ++ nel senso che puoi usare Managed C ++ (alias C ++ / CLI) per esporre le librerie / API C ++ verso .NET. Il processo è essenzialmente manuale (a differenza di SWIG ) ma non è neanche lontanamente paragonabile a quello delle interfacce DLL, e può essere molto meno doloroso di esporre una libreria tramite COM.

Managed C ++ può anche risolvere il problema inverso, cioè accedere alle librerie .NET dal codice C ++ "normale". Il vantaggio è che consente API molto più ricche e un'integrazione più stretta rispetto alle semplici interfacce DLL e alla COM (grezza), con molto meno lavoro.

    
risposta data 25.03.2016 - 06:51
fonte

Leggi altre domande sui tag