¿Cómo llamar a la función C++ desde el programa D? Todavía no puedo entender cómo hacerlo. ¿Qué comandos necesito ejecutar? Uso dmd en Fedora.Llamar C++ (C) desde el lenguaje D
Respuesta
ejemplo más simple que puedo pensar, si hace una llamada a funciones C:
$ cat a.c
int f(int a, int b){
return a + b + 42;
}
$ cat a.di
extern (C):
int f(int, int);
$ cat b.d
import std.stdio;
import a;
void main(){
writeln(f(100, 1000));
}
$ gcc -c a.c
$ dmd b.d a.o
$ ./b
1142
$
Si estás usando objetos compartidos, que podía así que algo como:
$ cat sdltest.di
module sdltest;
extern (C):
struct SDL_version{
ubyte major;
ubyte minor;
ubyte patch;
}
SDL_version * SDL_Linked_Version();
$ cat a.d
import std.stdio;
import sdltest;
void main(){
SDL_version *ver = SDL_Linked_Version();
writefln("%d.%d.%d", ver.major, ver.minor, ver.patch);
}
$ dmd a.d -L-lSDL
$ ./a
1.2.14
$
En este ejemplo , He vinculado con una función SDL. El argumento -L
a dmd
le permite pasar argumentos al ld
, en este caso -lSDL
para vincular con SDL.
Los archivos de la interfaz D (.di
) se describen here.
También debería echar un vistazo a htod.
¡Eso es genial! Muchas gracias. Funciona. ¿Qué es el archivo .di? No he leído sobre esto antes. – Stan
Entonces, por ejemplo, para usar libxml necesito escribir enlaces para las funciones que voy a usar, ¿verdad? – Stan
@StanislavFeldman: Creo que sí, a menos que alguien lo haya hecho antes. Algunas bibliotecas populares ya tienen enlaces D. ¿Necesitas específicamente libxml? D tiene un módulo ['std.xml'] (http://dlang.org/phobos/std_xml.html). También agregué un ejemplo de compilación con bibliotecas compartidas. – Vlad
- 1. ¿Cuál es la diferencia entre% d y% * d en el lenguaje c?
- 2. ¿Llamar a C/C++ desde Python?
- 3. cómo llamar a C# desde C++
- 4. Llamar LLVM Jit desde el programa c
- 5. ¿Es posible llamar al código C++ desde C#?
- 6. Llamar código fortran desde C#
- 7. Llamar a Python desde C++
- 8. Llamar .NET/C# desde R
- 9. Liberar recursos en el lenguaje D
- 10. ¿Extender el lenguaje C#?
- 11. Llamar al código d desde un shell interactivo
- 12. Quiero llamar a la biblioteca C "mysql.h" del lenguaje Rust
- 13. desarrollo de aplicaciones con el lenguaje D
- 14. Soporte de Emacs para el lenguaje D
- 15. Llamar a C# dll desde Delphi
- 16. Llamar código python (archivos .py) desde C#
- 17. Cómo llamar a window.alert ("mensaje"); desde C#?
- 18. ¿Cómo llamar código Java desde C#?
- 19. ¿Cómo llamar a C++ desde Java?
- 20. Llamar a una función MATLAB desde C#
- 21. Llamar a Python desde Objective-C
- 22. Llamar a cualquier método Java desde C#
- 23. Llamar a las funciones de C++ exe desde C#
- 24. llamar código de C++ no administrado desde C# usando pinvoke
- 25. ¿Llamar a C# desde C++ nativo, sin/clr o COM?
- 26. Llamar C# desde C++: cómo pasar nullptr a DateTime?
- 27. ¿Cómo puedo llamar a C++/CLI desde C#?
- 28. ¿Cómo llamar a Objective-C desde Javascript?
- 29. Llamar a un servicio web desde C++
- 30. Cómo llamar a MSBuild desde C#
Intenta mirar http://dlang.org/interfaceToC.html, aunque parece que solo funciona con C. Aquí puedes ver las propuestas sobre cómo interactuar con C++: http://dlang.org/cpp_interface. html –
Miré ese tutorial. Falló la descripción del archivo .di. Gracias por Vlad quien comparte conmigo la solución. – Stan