2010-11-22 49 views
6

Tôi hiện đang đánh giá xem có thể sử dụng thư viện c/C++ cho một dự án iPhone cụ thể của tôi hay không. Thư viện gốc sử dụng nhiều mã cửa sổ cụ thể (ví dụ: nó bao gồm windows.h và winsock.h). Tôi biết rằng tôi sẽ phải viết lại các bộ phận sử dụng mã cửa sổ cụ thể và thay thế winsocks bằng ví dụ ổ cắm bsd. Hoặc cố gắng chuyển đổi thành target-C++ và sử dụng apis mạng cụ thể của IOS vì nó được đề xuất trong tài liệu của Apple.Sử dụng thư viện c/C++ sử dụng mạng cho mục tiêu ứng dụng iphone c

Nhưng khi nó chỉ ra trong tài liệu của Apple, chỉ trong C và mã C-Objective-C được phép kết nối mạng. "iOS hỗ trợ mã mạng được viết bằng C và Objective-C". (https://developer.apple.com/library/ios/#referencelibrary/GettingStarted/GS_Networking_iPhone/)

Có vẻ như tôi phải viết lại toàn bộ thư viện trong mục tiêu-c để làm cho nó hoạt động trên iOS. Hoặc nó sẽ là đủ để programm một lớp wrapper trong mục tiêu-c và làm việc với thư viện gốc (thích nghi với bsd socket api hoặc target-C++)? ->Using C/C++ static libraries from iPhone ObjectiveC Apps

Nhưng mã mạng thực tế vẫn sẽ được viết c/C++ không phải mục tiêu-c.

Có khả năng điều này có thể hoạt động không? Tôi không muốn làm tất cả các công việc thích ứng với thư viện và sau đó nhận thấy rằng cách tiếp cận này không hoạt động.

Có ai đã thử điều gì đó tương tự trước đây không?

Trân trọng, Mike

Trả lời

1

Bạn sẽ có thể viết lại các phần của C++ thư viện để sử dụng socket BSD thay vì Windows socket API mà không cần bất kỳ vấn đề.

Apple không cấm mã C++ truy cập mạng, tuy nhiên API mạng chỉ được cung cấp bởi iOS là C (BSD socket, CoreFundation) hoặc Objective-C (Foundation…), có lẽ đó là nguồn gốc của sự nhầm lẫn của bạn. Bạn có thể tự do trộn mã C, C++ và Objective-C trong mã của riêng bạn hoặc trong các thư viện được liên kết tĩnh.

+0

đó là tin tuyệt vời! Cảm ơn nhiều! –

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