Hoy escuché sobre la programación D y que es compatible con el código C. Sin embargo, no he encontrado ninguna información sobre si es posible usar bibliotecas C como GTK o PortAudio desde D? Si es posible, ¿podría explicarme cómo hacer esto?¿Cómo usar una biblioteca C de D?
Respuesta
Es posible llamar a las bibliotecas C desde D. Lo que necesita hacer es convertir los archivos de encabezado C a D. En su mayor parte esto es bastante sencillo, y hay un command-line tool difícil de usar para ayudar automatizar el proceso En realidad, nunca funcionó para mí en nada más que ejemplos de juguetes, pero podría ser un buen comienzo para ver el tipo de transformaciones que se deben hacer. Simplemente ponga un fragmento que tenga problemas para traducir en un encabezado por sí mismo y vea qué htod hace con él.
El mayor problema que generalmente encontrará es el uso creativo del preprocesador C. Algunas cosas se pueden convertir en versiones() en D, pero no todas.
En cuanto a la compilación y vinculación con el código, en plataformas unix creo que puede compilar y vincular en el código C usando GCC. En Windows, debe compilar los archivos C con DMC y vincular con DMD. O puede compilar el código C en una DLL usando cualquier compilador capaz de eso, y luego para enlazar con DMD necesita hacer una lib libre de importación compatible con DMD de la DLL. Esto se puede hacer utilizando la herramienta implib que se encuentra en el número gratuito Basic Utilities Package disponible en DigitalMars.
También hay muchas de estas traducciones de encabezado que ya se han hecho. En primer lugar, es útil navegar por el proyecto Bindings de Dsource o preguntar en los grupos de noticias D de digitalmars antes de embarcarse en algo grande como traducir encabezados GTK. Una gran cantidad de bibliotecas populares como GTK ya han sido envuelto (por ejemplo aquí: GTKD)
El código D se puede vincular con los archivos del objeto C y puede interactuar con las DLL, pero deberá generar un módulo D a partir del archivo del encabezado C que desee utilizar. El sitio web oficial D tiene a guide por hacer eso mismo.
Tome un vistazo a http://dsource.org Hay muchos proyectos que podrían ayudar a conseguir comenzar con
Usted tiene que escribir fijaciones C. This answer explica cómo.
Alternativa popular es cargar la biblioteca durante el tiempo de ejecución. Aquí hay un ejemplo de cómo cargar libpng y llamar a una función 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
Usar la DPaste para probarlo: http://www.dpaste.dzfl.pl/917bc3fb
- 1. ¿Cómo usar una biblioteca C++ en una aplicación C#?
- 2. Biblioteca de procesamiento de imágenes para D?
- 3. ¿Cómo puedo usar una biblioteca C++ de node.js?
- 4. Usar una biblioteca de C del código de C#
- 5. ¿Cómo usar una matriz 3-D en el kernel OpenCL?
- 6. ¿Cómo puedo usar la biblioteca Boost :: regex.hpp en C++?
- 7. cómo convertir una cadena c en una cadena d?
- 8. Implementación de una API de C en D
- 9. C "% d" especificador de formato
- 10. Biblioteca de dibujo fácil de usar en c/C++?
- 11. ¿Es posible usar una biblioteca C con Python AppEngine?
- 12. Usar una biblioteca estática en Qt Creator
- 13. cómo usar biblioteca c/cpp/funciones en android
- 14. Cómo usar la biblioteca C++ Boost con pkg-config?
- 15. Llamar C++ (C) desde el lenguaje D
- 16. biblioteca de álgebra lineal para el lenguaje de programación D
- 17. ¿Cómo construir una biblioteca estática Objective-C?
- 18. Posible usar XmlDataProvider con d: DataContext?
- 19. ¿Cómo uso una biblioteca C++ de C# y .NET?
- 20. Cómo vincular bibliotecas D en un programa D
- 21. vincular y usar una biblioteca C++ con una aplicación Objective-C
- 22. registro en una biblioteca de C#
- 23. Enlazar una biblioteca de Python TO C
- 24. C: Diagramación de una gran biblioteca
- 25. ¿Biblioteca de cliente SNMP fácil de usar para C++?
- 26. Escribiendo un enlace D (D2) para bibliotecas C existentes
- 27. ¿Cómo probar una usabilidad de la biblioteca C++ en configure.in?
- 28. ¿Cómo usar la biblioteca de regexp-me?
- 29. ¿Por qué usar @property en D?
- 30. Optimización de matrices C++ 2-D