D programından C++ işlevi nasıl çağırılır? Hala nasıl yapılacağını anlayamıyorum. Hangi komutları yürütmem gerekiyor? Fedora'da dmd kullanıyorum. C işlevlerini çağıran eğer ben, aklınıza gelebilecekD dilinde C++ (C) çağrısı
cevap
En basit örnek:
$ 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
$
paylaşılan nesneleri kullanarak ediyorsanız olabilir bu yüzden böyle bir şey: Bu örnekte
$ 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
$
Ben bir SDL işlevi ile bağlantılı. dmd
argümanı, ld
argümanlarını geçmenize izin verir, bu durumda SDL ile bağlantı kurmak için -lSDL
. D arabirim dosyaları (.di
) here belgesinde açıklanmaktadır.
Ayrıca htod'a da göz atmalısınız.
Bu harika! Çok teşekkür ederim. İşe yarıyor. .di dosyası nedir? Daha önce okumadım. – Stan
Yani, örneğin, libxml kullanmak için kullanacağım işlevler için bağlayıcılar yazmam gerekiyor, değil mi? – Stan
@StanislavFeldman: Sanırım birileri daha önce yapmadıkça. Bazı popüler kütüphanelerde zaten D bağlamaları var. Özellikle libxml'e ihtiyacınız var mı? D bir ['std.xml'] (http://dlang.org/phobos/std_xml.html) modülüne sahiptir. Ayrıca paylaşılan kütüphaneler ile bir derleme örneği ekledim. – Vlad
- 1. C dilinde
- 2. C dilinde adlandırılmış yöneltmeler için izleme C#
- 3. C++ D 2.0
- 4. waitpid çağrısı C
- 5. C++ 'dan bir yapıyla C++ çağrısı C#
- 6. C dilinde seri programlama, DOS
- 7. c dilinde ayrı çıkış verisi
- 8. ptrdiff_t, C dilinde nerede tanımlanır?
- 9. C dilinde dosya uzantısı alma
- 10. C++ dilinde derleme zamanı iddiaları?
- 11. C dilinde _start() kullanımı nedir?
- 12. ColdFusion'dan C# çağrısı
- 13. .NET/C# çağrısı R
- 14. C++ hızlandırma yöntem çağrısı
- 15. C++ evrensel işlev çağrısı
- 16. C dilinde rollDice() işlevini nasıl uygulamalıyım?
- 17. D kütüphanesinin C++ koduna bağlanması
- 18. Nasıl A $ B $ C $ D veya A% B% C% D A $$$ B itibaren $$$$$$ C $$$$$$$$$ D string in SQL Server?
- 19. D dilinde dize bir char * nasıl yazılır?
- 20. C# dilinde özel "textChanged" işlevi nasıl yazılır?
- 21. C dilinde nasıl alt yazı alabilirim? Örneğin
- 22. C# dilinde #pragma uyarı kullanımı nedir?
- 23. Özel X86_64 C işlev çağrısı için çağrı çağrısı
- 24. asenkron işlev çağrısı C++ 0x
- 25. C# Uzak Yöntem Çağrısı (RMI)
- 26. C printf% d ve% f kullanarak
- 27. C dilinde imzalanmış tek bayt char için - (- 128) nedir?
- 28. C++ dilinde bir alt dizgi için std :: string'i nasıl ararsınız?
- 29. C# ifadesinde dinamik PSObject Özellikleri çağrısı RuntimeBinderException
- 30. Bu Objective C çağrısı neden asılı görünüyor?
Sadece C ile çalıştığını görünse de, http://dlang.org/interfaceToC.html adresine bakmayı deneyin. C++ ile nasıl bağlantı kuracağınıza ilişkin önerilere buradan bakabilirsiniz: http://dlang.org/cpp_interface. html –
Bu eğiticiye baktım. .di dosyası hakkında açıklama eksik. Bana çözüm paylaşan Vlad için teşekkürler. – Stan