Cách gọi hàm C++ từ chương trình D? Tôi vẫn không thể hiểu cách thực hiện. Tôi cần thực hiện các lệnh nào? Tôi sử dụng dmd trong Fedora.Gọi C++ (C) từ ngôn ngữ D
Trả lời
ví dụ đơn giản nhất tôi có thể nghĩ ra, nếu bạn đang gọi điện thoại chức năng 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
$
Nếu bạn đang sử dụng đối tượng chia sẻ, bạn có thể để một cái gì đó như:
$ 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
$
Trong ví dụ này , Tôi đã liên kết với hàm SDL. Đối số -L
cho dmd
cho phép bạn chuyển đối số đến ld
, trong trường hợp này là -lSDL
để liên kết với SDL.
D tệp giao diện (.di
) được mô tả here.
Bạn cũng nên xem htod.
Tuyệt vời! Cảm ơn nhiều. Nó hoạt động. Tệp .di là gì? Tôi đã không đọc về nó trước đây. – Stan
Vì vậy, ví dụ, để sử dụng libxml tôi cần phải viết các ràng buộc cho các chức năng mà tôi sẽ sử dụng, phải không? – Stan
@StanislavFeldman: Tôi nghĩ vậy, trừ khi ai đó đã làm điều đó trước đây. Một số thư viện phổ biến đã có liên kết D. Bạn có cần libxml không? D có mô-đun ['std.xml'] (http://dlang.org/phobos/std_xml.html). Tôi cũng đã thêm một ví dụ biên dịch với các thư viện được chia sẻ. – Vlad
- 1. Sự khác biệt giữa% d và% * d trong ngôn ngữ c là gì?
- 2. C đến C++: Chuyển từ một ngôn ngữ khác
- 3. Ngôn ngữ kịch bản cho C/C++?
- 4. Giải phóng tài nguyên bằng ngôn ngữ D
- 5. Mở rộng ngôn ngữ C#?
- 6. C# Ngôn ngữ lập trình
- 7. Iterator trong ngôn ngữ C
- 8. Hỗ trợ Emacs cho ngôn ngữ D
- 9. Kinh nghiệm với ngôn ngữ lập trình D
- 10. C# giống như các sự kiện trong ngôn ngữ lập trình D
- 11. % s và% d có nghĩa là gì trong printf bằng ngôn ngữ C?
- 12. Phát hiện ngôn ngữ từ chuỗi unicode trong C++
- 13. Xóa một dòng từ một tệp bằng ngôn ngữ C
- 14. LỖI: cho phép từ chối cho ngôn ngữ c
- 15. Tạo ngôn ngữ lập trình với C#
- 16. Nhận ngôn ngữ hiện tại trong C#
- 17. Thay đổi ngôn ngữ trong C#
- 18. Tôi muốn gọi thư viện C "mysql.h" từ ngôn ngữ Rust
- 19. C làm ngôn ngữ hướng đối tượng
- 20. C# Ngôn ngữ được gõ động
- 21. Ngôn ngữ PHP có phải là C?
- 22. RDMS cho ngôn ngữ C newbie?
- 23. Thay đổi ngôn ngữ hệ thống C#
- 24. Ngôn ngữ lắp ráp thành C
- 25. UML cho ngôn ngữ lập trình C
- 26. Hỗ trợ đa ngôn ngữ Trong C#
- 27. C# là một ngôn ngữ cấp cao?
- 28. Ngôn ngữ lập trình để tạo DLL: C++ hoặc C#
- 29. Bắt đầu dịch vụ systemd từ ứng dụng C/C++ hoặc gọi dịch vụ D-Bus
- 30. Gọi phương thức C từ mã C++/Java/C#?
Hãy thử xem http://dlang.org/interfaceToC.html, mặc dù nó có vẻ chỉ hoạt động với C. Bạn có thể xem các đề xuất ở đây về cách giao diện với C++: http://dlang.org/cpp_interface. html –
Tôi đã xem hướng dẫn đó. Nó bị mất mô tả về tập tin .di. Cảm ơn Vlad đã chia sẻ với tôi giải pháp. – Stan