Nhiều ngôn ngữ lập trình hiện nay dựa trên C; như C++, C#, Java, Objective-C. Vậy tôi có thể gọi phương thức C từ mã C++ không? Hoặc gọi C từ Java hoặc C#? Hay mục tiêu này nằm ngoài tầm với và không hợp lý? Vui lòng bao gồm mẫu mã nhanh cho sự hiểu biết của tôi và của mọi người khác.Gọi phương thức C từ mã C++/Java/C#?
Trả lời
C++, C#, Objective-C và Java tất cả có thể gọi các thủ tục C. Dưới đây là một vài liên kết sẽ cung cấp cho bạn tổng quan về quy trình cần thiết để gọi C từ mỗi ngôn ngữ bạn đã hỏi.
Nó có thể gọi các thủ tục C từ mã C vừa được biên dịch hay không. Hay mã C phải nằm trong thư viện? –
C++ và Objective-C có thể biên dịch C, vì chúng là cả hai siêu. C# và Java sẽ yêu cầu mã C tồn tại trong libs – Alan
bài viết về java không phải là về gọi c từ java nhưng gọi java từ c – ManBugra
Một ví dụ về gọi C từ C++. Lưu hàm C này trong một tập tin gọi là a.c:
int f() {
return 42;
}
và biên dịch nó:
gcc -c a.c
mà sẽ tạo ra một tập tin gọi là a.o. Bây giờ viết một chương trình C++ trong một tập tin gọi là main.cpp:
#include <iostream>
extern "C" int f();
int main() {
std::cout << f() << std::endl;
}
và biên dịch và liên kết với:
g++ main.cpp a.o -o myprog
mà sẽ tạo ra một execuatable gọi myprog mà in 42 khi chạy.
Để Gọi C Phương pháp Trong Java ...
có một từ khóa "bản địa" mà bạn có thể viết mã C phụ thuộc vào máy và gọi nó từ Java ....
Về cơ bản nó tạo ra một DLL file..then u phải tải nó trong chương trình ur ...
một ví dụ tốt đẹp here ....
để gọi các phương thức C từ Java, có nhiều tùy chọn, bao gồm:
- JNA - Java Native Access. Miễn phí. Dễ sử dụng. Khai báo các lớp và các giao diện Java song song với các cấu trúc và hàm C hiện có. Chậm hơn JNI - khoảng vài trăm nano giây cho mỗi cuộc gọi.
- JNI - Giao diện gốc Java. Miễn phí. Tùy chọn nhanh nhất. Yêu cầu một lớp mã keo gốc giữa mã Java của bạn và các hàm gốc bạn muốn gọi.
- JNIWrapper - Sản phẩm thương mại, tương tự như JNA.
Để gọi C/C++ từ Java, hãy xem BridJ (giống như JNA với C++ và hiệu suất tốt hơn).
- 1. Gọi phương thức C# BHO từ Javascript
- 2. Gọi phương thức python từ C++ (hoặc C) gọi lại
- 3. Gọi phương thức C++ từ webviews Javascript
- 4. Làm cách nào để gọi các phương thức trong C# dll từ mã C của tôi?
- 5. Phương thức gọi từ BackgroundWorker
- 6. Gọi bất kỳ phương thức Java nào từ C#
- 7. Gọi phương thức lớp riêng từ phương thức cá nhân
- 8. gọi phương thức java trong mã javascript
- 9. Cách cấm gọi phương thức C#
- 10. Phương thức gọi trên lớp con từ phương thức lớp cha (Mục tiêu-c 2.0)
- 11. Gọi phương thức C++ từ QML (Qt Quick application)
- 12. gọi C++ mã từ c
- 13. Gọi phương thức tĩnh trong C#
- 14. Gọi phương thức từ phương thức khác trong cùng một lớp trong C++
- 15. Làm thế nào để gọi một phương thức từ phương thức khác trong Mục tiêu C?
- 16. Tại sao biên dịch C# gọi phương thức sản để gọi phương thức BaseClass trong IL
- 17. Lệnh gọi phương thức từ viewmodel
- 18. Gọi phương thức AppDelegate từ lớp
- 19. Gọi phương thức Win32 API từ Java
- 20. Gọi phương thức VB6 từ .NET DLL
- 21. Phương thức hoạt động gọi từ Fragment
- 22. Phương thức gọi từ một ViewController khác
- 23. Phương thức gọi được viết bằng C# trong Excel 2007 từ công thức ô
- 24. Gọi mã C# từ Java?
- 25. phương pháp Gọi Hub trong C# mã
- 26. Phương thức gọi bên trong phương thức khác trong javascript?
- 27. Mã thử nghiệm đơn vị gọi các phương thức tĩnh
- 28. Mã trạng thái từ phương thức FTPWebRequest.GetResponse()
- 29. Gọi phương thức python từ C/C++, và giải nén giá trị trả về
- 30. Các phương thức gọi từ Trình gỡ lỗi Xcode?
"... dựa trên C; như ... C#, Java ..." - Có phải không? Tôi nghĩ rằng điều này được giới hạn trong các dấu ngoặc nhọn và dấu chấm phẩy trong những trường hợp đó. – sellibitze
đồng ý, sự tương đồng cú pháp không có nghĩa là chúng được dựa trên C ngay cả khi chúng có thể (hoặc có thể là C++); C không có phương pháp.C++ và Objective-C có thể gọi hàm C và liên kết tới các thư viện C-viết mà không gặp vấn đề gì. – ShinTakezou