Dzisiaj usłyszałem o programowaniu D i że jest kompatybilny z C-Code. Niemniej jednak nie znalazłem żadnych informacji o tym, czy możliwe jest korzystanie z bibliotek C, takich jak GTK czy PortAudio z D? Jeśli to możliwe, czy możesz wyjaśnić, jak to zrobić?Jak korzystać z biblioteki C z D?
Odpowiedz
Możliwe jest wywoływanie bibliotek C z D. To, co musisz zrobić, to przekonwertować pliki nagłówkowe C na D. W większości przypadków jest to całkiem proste, a trudno jest użyć command-line tool, aby pomóc zautomatyzować proces. To nigdy nie działało dla mnie na niczym innym, jak tylko przykładach zabawek, ale może to być dobry początek, aby zobaczyć rodzaj transformacji, które należy wykonać. Wystarczy, że wstawisz fragment kodu, który sam utrudnisz w tłumaczeniu i zobaczysz, co robi z nim htod.
Największy problem, na który napotykasz, to kreatywne użycie preprocesora C. Niektóre rzeczy można przekształcić w instrukcje version() w D, ale nie wszystkie.
Co do rzeczywistej kompilacji i łączenia z kodem, na platformach uniksowych Myślę, że możesz skompilować i połączyć kod C używając GCC. W systemie Windows trzeba skompilować pliki C za pomocą DMC i połączyć z DMD. Lub możesz skompilować kod C do biblioteki DLL za pomocą dowolnego kompilatora, który jest w stanie to zrobić, a następnie połączyć się z DMD, aby utworzyć bibliotekę importu zgodną z DMD z biblioteki DLL. Można to zrobić za pomocą narzędzia implib dostępnego w darmowym oprogramowaniu DigitalMars.
Istnieje również wiele tych tłumaczeń nagłówkowych już wykonanych. Warto najpierw przejrzeć projekt Dsource w wersji Bindings lub najpierw zadać pytanie grupom cyfrowym D, zanim rozpocznie się coś dużego jak tłumaczenie nagłówków GTK. Wiele popularnych bibliotek takich jak GTK zostały opakowane (np tutaj: GTKD)
Kod D może być powiązany z plikami obiektów C i może wchodzić w interakcje z bibliotekami Dll C, ale będziesz musiał wygenerować moduł D z pliku nagłówkowego C, którego chcesz użyć. Oficjalna strona D ma a guide za zrobienie tego właśnie.
Spójrz na http://dsource.org Istnieje wiele projektów, które mogą pomóc Ci uzyskać zacząć
trzeba napisać wiązań C. This answer wyjaśnić, w jaki sposób.
Popularną alternatywą jest ładowanie biblioteki podczas uruchamiania. Oto przykład, jak załadować libpng i wywołać funkcję 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
użyć DPaste go przetestować: http://www.dpaste.dzfl.pl/917bc3fb
- 1. Łączenie biblioteki D z kodem C++
- 2. Jak korzystać z biblioteki OpenSSL w POCO C++ poprawnie
- 3. Dlaczego warto korzystać z @property w D?
- 4. Jak przekazać obiekt z D do C++?
- 5. Jak korzystać z Biblioteki fakturowania Android?
- 6. Jak poprawnie korzystać z biblioteki pidfile?
- 7. Jak korzystać z biblioteki regexp-me?
- 8. Jak korzystać z biblioteki php OCR (TesseractOCR)
- 9. jak korzystać z ILspy debugowania biblioteki dll?
- 10. Jak korzystać z wersji debugowania biblioteki libc
- 11. Jak korzystać z biblioteki statycznej (np. Biblioteki cocoapods) na XCTest?
- 12. Jak korzystać z tablicy 3-D w kernelu OpenCL?
- 13. jak korzystać z odwrotnego C
- 14. Jak korzystać z klas C++ z ctypes?
- 15. Jak połączyć opencv w QtCreator i korzystać z biblioteki Qt
- 16. Jak korzystać z biblioteki standardowej za pomocą Clanga i LibToolinga
- 17. Jak korzystać z funkcji Waf do budowania biblioteki współdzielonej?
- 18. Wywołanie biblioteki Haskell z C++
- 19. Jak wyeksportować klasę C++ z biblioteki dll?
- 20. Cel C - Jak korzystać z zmiennych zewnętrznych?
- 21. C# DataSet.Relations: Jak korzystać z powiązań DataSet?
- 22. Jak korzystać z TransactionScope w języku C#?
- 23. Jak korzystać z timera w C?
- 24. Cel C - Jak korzystać z metody initWithCoder?
- 25. Jak korzystać z właściwości w języku C#?
- 26. Jak korzystać z flag bitowych w C++?
- 27. Jak korzystać z GetProcessMemoryInfo w C++?
- 28. Jak korzystać z funkcji klasy w C++?
- 29. Jak korzystać z TCharHelper?
- 30. Jak korzystać z Oracle sdo_distance