Aujourd'hui, j'ai entendu parler de la programmation D et de sa compatibilité avec le code C. Néanmoins, je n'ai trouvé aucune information sur s'il est possible d'utiliser des bibliothèques C comme GTK ou PortAudio de D? Si c'est possible, pourriez-vous expliquer comment faire cela?Comment utiliser une bibliothèque C à partir de D?
Répondre
Il est possible d'appeler des bibliothèques C à partir de D. Ce que vous devez faire est de convertir les fichiers d'en-tête C en D. Pour la plupart, c'est assez simple, et il est difficile d'utiliser command-line tool automatiser le processus. Cela n'a jamais vraiment fonctionné pour moi que sur des exemples de jouets, mais cela pourrait être un bon début pour voir le genre de transformations qui doivent être faites. Il suffit de mettre un extrait que vous avez du mal à traduire en en-tête et de voir ce que fait htod avec.
Le plus gros problème que vous rencontrerez habituellement est l'utilisation créative du préprocesseur C. Certaines choses peuvent être transformées en instructions version() dans D, mais pas toutes. En ce qui concerne la compilation et la liaison avec le code, sur les plateformes de type unix, je pense que vous pouvez compiler et lier dans le code C en utilisant GCC. Sous Windows, vous devez compiler les fichiers C à l'aide de DMC et les lier à DMD. Ou vous pouvez compiler le code C dans une DLL en utilisant n'importe quel compilateur capable de cela, et ensuite pour lier avec DMD vous devez faire une bibliothèque d'importation compatible DMD hors de la DLL. Cela peut être fait en utilisant l'outil implib trouvé dans le Basic Utilities Package gratuit disponible auprès de DigitalMars.
De nombreuses traductions d'en-tête ont déjà été effectuées. Il est utile de parcourir d'abord le projet Bindings de Dsource, ou de demander d'abord aux groupes de discussion digitalmars D avant de se lancer dans quelque chose d'aussi important que la traduction des en-têtes GTK. Beaucoup de bibliothèques populaires comme GTK ont déjà été enveloppé (par exemple ici: GTKD)
Le code D peut être lié à des fichiers objet C et peut interagir avec des DLLs C, mais vous devrez générer un module D à partir du fichier d'en-tête C que vous souhaitez utiliser. Le site officiel D a a guide pour faire cela même chose.
Jetez un oeil à http://dsource.org Il y a beaucoup de projets qui pourraient vous aider à obtenir commencer par
Vous devez écrire des liaisons C. This answer expliquer comment.
Une alternative populaire consiste à charger la bibliothèque pendant l'exécution. Voici un exemple comment charger libpng et appeler une fonction libpng:
module libpngtest;
import std.stdio;
import core.sys.posix.dlfcn;
alias uint function() png_access_version_number_t;
int main() {
auto lib = dlopen("libpng.so".ptr, RTLD_LAZY | RTLD_LOCAL);
if (lib is null) {
writeln("EEEK!");
writeln(to!string(dlerror()));
return -1;
} else {
writeln("WOOT!");
auto png_access_version_number = cast(png_access_version_number_t)dlsym(lib, "png_access_version_number");
writeln(png_access_version_number());
}
if (dlclose(lib) == 0) {
return 0;
} else {
return -1;
}
} // main() function
// compile: dmd libpngtest.d -L-ldl
// run: ./libpngtest
Utilisez le DPaste pour le tester: http://www.dpaste.dzfl.pl/917bc3fb
- 1. Comment appeler une bibliothèque C à partir de .NET
- 2. Appelez la bibliothèque C++ à partir de C#
- 3. Comment utiliser fopen à partir d'une bibliothèque C lors de l'utilisation de l'iPhone SDK
- 4. Comment utiliser une fonction de bibliothèque Haskell?
- 5. Utiliser UIKit à partir de C/C++
- 6. Comment utiliser le SDK MS DIA à partir de C#?
- 7. charger une bibliothèque dynamique à partir d'elisp
- 8. Exportation de fonctions à partir d'une bibliothèque de classes C#
- 9. Utiliser une API de bibliothèque java .jar en C#?
- 10. Comment utiliser un module C++ à partir d'une application Mono
- 11. Comment puis-je utiliser la bibliothèque Boost :: regex.hpp en C++?
- 12. création de bibliothèque partagée à partir de C++
- 13. Comment appeler une bibliothèque de classes C++ à partir de VB6
- 14. comment utiliser la bibliothèque d'en-têtes C dll dans C#
- 15. Comment utiliser la bibliothèque Tortoisesvn?
- 16. C++: quelle bibliothèque regex devrais-je utiliser?
- 17. Comment utiliser NYTProf dans une bibliothèque
- 18. Java: comment utiliser une bibliothèque tierce?
- 19. Puis-je envoyer une commande ESC d à une imprimante POS à partir de perl?
- 20. exposer une bibliothèque de classe C++ non gérée à C#
- 21. Comment lier à une bibliothèque statique en C?
- 22. Documenter le code de bibliothèque C++/CLI à utiliser à partir des meilleurs outils et pratiques C#?
- 23. Comment pouvons-nous créer une bibliothèque à partir d'une application? (Dérivation de la bibliothèque/API à partir des applications)
- 24. Comment initialiser une classe à partir d'une bibliothèque?
- 25. Comment générer une bibliothèque d'importation (libsample.a) à partir de la bibliothèque dynamique (libsample.so) sous Linux
- 26. Classe non enregistrée .... lorsque j'essaie d'appeler une bibliothèque C# gérée à partir d'un C++ non géré
- 27. "Utiliser MFC dans une bibliothèque statique" renvoie à MFC80U.dll
- 28. Pouvez-vous utiliser une bibliothèque C# dans un serveur AMP?
- 29. bibliothèque d'algèbre linéaire pour le langage de programmation D
- 30. Quelle bibliothèque C++ puis-je utiliser pour lire des pixels à partir d'images DICOM?