2010-08-22 9 views

Antwort

10

Ja, es ist möglich. In der Tat ist dies eines der Hauptmerkmale von dmd. Um eine D-Funktion von C aufzurufen, mache einfach die Funktion extern(C), z.B.

// .d 
import std.c.stdio; 
extern (C) { 
    shared int x; // Globals without 'shared' are thread-local in D2. 
        // You don't need shared in D1. 
    void increaseX() { 
    ++ x; 
    printf("Called in D code\n"); // for some reason, writeln crashes on Mac OS X. 
    } 
} 
// .c 
#include <stdio.h> 
extern int x; 
void increaseX(void); 

int main (void) { 
    printf("x = %d (should be 0)\n", x); 
    increaseX(); 
    printf("x = %d (should be 1)\n", x); 
    return 0; 
} 

Siehe für weitere Informationen Interfacing to C.

+1

+1 für den Link zu genau der richtigen Seite. Beachten Sie, dass sich der C-Code und der D-Code in separaten Dateien befinden müssen. (Hört sich offensichtlich an, sollte aber trotzdem ausdrücklich erwähnt werden.) –

1

Die obige Antwort ist falsch, soweit ich weiß. Da die D-Hauptroutine aufgerufen werden muss, bevor Sie irgendwelche D-Funktionen verwenden. Dies ist notwendig, um D zu initialisieren, z. seine Müllsammlung. Um das zu lösen, können Sie einfach das Programm durch eine Hauptroutine in D eingeben oder Sie können die D Hauptroutine von C anrufen. (Aber ich weiß nicht genau, wie das funktioniert)

+1

Hier ist eine Diskussion aus dem Jahr 2007: http://www.digitalmars.com/d/archives/digitalmars/D/learn/Calling_D_from_C_-_What_s_the_present_status_6003.html –

Verwandte Themen