Ist es möglich? z. B. compiliere .c mit dmc und .d mit dmd und verbinde sie dann miteinander, wird das funktionieren? Kann ich D-Funktionen von C-Code aufrufen, Globals teilen usw.? Vielen Dank.Mischen von C- und D-Code im selben Programm?
Antwort
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.
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)
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 –
- 1. Mischen von C# und VB im selben Projekt
- 2. Mischen von HTML und C#
- 3. Wie spdlog mehrmals im selben Programm starten und herunterfahren?
- 4. Mischen von C++ und Objective C
- 5. Mischen von Qt und Boost
- 6. Wie sicher ist es, ARC- und Nicht-ARC-Code im selben iOS-Projekt zu mischen?
- 7. Mischen von C/C++ - Bibliotheken
- 8. iOS - Verwenden Sie Swift und Objective c im selben Projekt?
- 9. Mischen von Dateien und Schleifen
- 10. Shellcode im C-Programm
- 11. Können Sie mehrere Pixel (Fragment) -Shader im selben Programm haben?
- 12. Sublime Text 3 REPL - Programm im selben REPL Fenster öffnen
- 13. Kann ich bei Verwendung von pdfkit auch Schriftschnitte im selben Absatz mischen?
- 14. ASP.NET - App_Code - Mix VB und C# im selben Ordner
- 15. Storyboard und Xib im selben Projekt?
- 16. Eclipse (GUI), geben eine Eingabe und Ausgabe von einem Programm im selben Fenster
- 17. Mischen C Structs und Objective-C Eigenschaften
- 18. Kann ein C-Programm im selben Makefile ausgeführt werden, in dem es erstellt wird?
- 19. Mischen von C- und Assembly-Quellen und Erstellen mit cmake
- 20. Mischen von C/C++ - Code niedriger Ebene
- 21. StreamReader und StreamWriter im selben Stream?
- 22. Erhalten Systemausgabe im C-Programm
- 23. Wie kann ich eine Datei lesen, die ich im selben Programm erstellt habe, C++?
- 24. mischen autoproxycreator und proxyfactories im frühjahr
- 25. Mischen log4cxx und log4net
- 26. RequestMethod POST und GET im selben Controller?
- 27. Mit Yii1 und Yii2 im selben Projekt
- 28. Mischen von TCP und UDP
- 29. Film, Bildbearbeitung, Mischen von Audio im IPhone
- 30. Wie kann man HTTP-Anfragen und einen seriellen Kanal im selben Python-Programm anhören?
+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.) –