2010-06-13 40 views
8

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#?

+0

"... 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

+0

đồ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

Trả lời

5

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.

+0

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? –

+0

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

+0

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

2

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.

1

Để 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 ....

0

để 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.
0

Để 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).

Các vấn đề liên quan