- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Có thể gói thư viện c++ vào c không?
我该怎么做?
Có dụng cụ làm sẵn nào không?
(yêu cầu quyền truy cập vào thư viện c++ hiện có, nhưng chỉ có thể sử dụng C)
câu trả lời hay nhất
Bạn có thể viết mã hướng đối tượng bằng C, vì vậy nếu đó là thư viện C++ hướng đối tượng, bạn có thể gói nó trong giao diện C. Tuy nhiên, việc này có thể khá tẻ nhạt, đặc biệt nếu bạn cần hỗ trợ tính kế thừa, chức năng ảo và những thứ tương tự.
Nếu thư viện C++ áp dụng lập trình chung (mẫu), nó có thể rất phức tạp (bạn cần cung cấp tất cả các phiên bản mẫu bắt buộc) và nhanh chóng đạt đến điểm không đáng có.
Giả sử đó là OO, đây là bản phác thảo cơ bản về cách triển khai OO trong C:
Các lớp C++:
lớp cpp {
public:
cpp(int i);
vô hiệu f();
};
Giao diện C:
#ifdef __cplusplus
bên ngoài "C" {
#endif
typedef void* c_handle;
c_handle c_create(int i)
{
trả về cpp mới (i);
}
void c_f(c_handle hdl)
{
static_cast(hdl)->f();
}
void c_destroy(c_handle hdl)
{
xóa static_cast(hdl);
}
#ifdef __cplusplus
}
#endif
Bạn có thể sửa đổi nó theo yêu cầu của bạn. Ví dụ: nếu đây là giao diện C công khai cho API C++ riêng tư, thì việc đưa con trỏ thực tế làm tay cầm có thể khiến nó dễ bị tấn công. Trong trường hợp đó, bạn đưa ra các thẻ điều khiển về cơ bản là số nguyên, lưu trữ các con trỏ trong bản đồ từ tay cầm tới con trỏ và truyền qua tìm-thay thế.
Việc có các hàm trả về chuỗi và các tài nguyên có kích thước động khác cũng có thể trở nên khá phức tạp. Bạn cần người gọi C cung cấp bộ đệm nhưng nó không thể biết trước kích thước. Một số API (chẳng hạn như một phần của API WIn32) cho phép người gọi gọi các hàm như vậy với bộ đệm có độ dài 0, trong trường hợp đó chúng trả về độ dài của bộ đệm được yêu cầu. Tuy nhiên, làm như vậy sẽ khiến các cuộc gọi thông qua API trở nên kém hiệu quả. (Nếu chỉ biết độ dài của bộ đệm cần thiết sau khi thuật toán được thực thi thì nó sẽ cần được thực thi hai lần.)
Một điều tôi đã làm trước đây là đưa ra một mã điều khiển (tương tự như mã trong đoạn mã trên) cho một chuỗi được lưu trữ nội bộ và cung cấp API để yêu cầu kích thước bộ đệm mong muốn, truy xuất chuỗi cung cấp bộ đệm và Phá hủy tay cầm (xóa chuỗi được lưu trữ nội bộ).
Đây là PITA thực sự, nhưng C là như vậy.
Về c++ - gói thư viện c++ trong c? (không có "extern c"), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/6047255/
Mã này có đúng không? extern "C" extern int x; // 1 extern extern "C" int y // 2 extern "C" extern
Theo C++ Primer, chúng ta có thể cung cấp trình khởi tạo cho một biến được xác định là extern, nhưng làm như vậy sẽ ghi đè extern. extern với bộ khởi tạo là một định nghĩa: extern double pi =
Sử dụng Cuda 5.0, VS2010 Dự án này biên dịch và liên kết tốt trong VS2012, nhưng VS2012 không hỗ trợ gỡ lỗi Nsight nên tôi cũng đã phát triển nó trong VS2010. Vậy là tôi có tệp dự án VS2010,
Câu hỏi này đã có câu trả lời: Làm cách nào để sử dụng extern để chia sẻ các biến giữa các tệp nguồn? (19 câu trả lời) Trình biên dịch khác nhau
Tôi đang viết thư viện chia sẻ C++ để các chương trình C sử dụng. Tuy nhiên, tôi gặp vấn đề với "C" bên ngoài và bên ngoài. Hãy xem xét đoạn mã sau. Tệp tiêu đề của tôi trông như thế này: #ifdef __cplusplus.
Liệu có sự khác biệt không nếu tôi sử dụng công cụ xác định "C" bên ngoài cho toàn bộ tiêu đề hoặc chỉ định bên ngoài cho từng chức năng? Theo như tôi biết thì không, vì chỉ các hàm và biến mới có thể được liên kết bên ngoài, nên khi tôi tạo nguyên mẫu cho từng hàm và
Câu hỏi này đã có câu trả lời ở đây: Tác dụng của "C" bên ngoài trong C++ là gì? (17 câu trả lời) Đã đóng 7 năm trước. Tôi đã thấy mã C/C++ sử dụng e được khai báo trong chữ ký hàm
Vì vậy, tôi sử dụng svn:externals để kiểm tra kho lưu trữ bên ngoài. Các kho lưu trữ bên ngoài có cài đặt svn-externals riêng. Bây giờ, khi cập nhật bản sao làm việc của dự án của tôi, các tệp từ kho lưu trữ bên ngoài đang được cập nhật, nhưng các tệp bên ngoài của nó thì không. Nên
Có thể bỏ qua các phần phụ thuộc bên ngoài của các thẻ được tham chiếu trong thuộc tính svn:externals không? Đây có vẻ là một câu hỏi kỳ lạ, nhưng hãy để tôi giải thích... Tôi có một bộ sưu tập lớn các mô-đun mã "có thể cắm" độc lập, mỗi mô-đun có thể được phát triển độc lập như một dự án riêng biệt.
Tôi đã thấy 2 cách tạo biến toàn cục, sự khác biệt là gì và khi nào nên sử dụng chúng? //.h extern NSString * const MyConstant; //.m NSString * const MyCo
Tôi đã tạo một tài khoản sọc qua sọc api trong mô-đun thử nghiệm. Và liên kết một tài khoản ngân hàng với tài khoản. Đi tới bảng điều khiển Stripe -> kết nối -> acc
Tôi có một mã dưới đây. Nó là một phần của thư viện chia sẻ động được tải bởi chương trình qemu (chương trình C) bằng dlopen. bên ngoài "C" { bên ngoài uint64_t Host_virt_offset;
Trang 60 của C++ Primer Phiên bản thứ 5 thảo luận cách chia sẻ các biến const giữa các tệp //file_1.cc extern const int bufSize = fcn();
Có gì sai với câu hỏi bên ngoài chưa được giải quyết này? Tôi đang cố gắng triển khai tính năng này vào InitInstance của ứng dụng MFC của mình. Nhưng tôi gặp lỗi dòng này từ trình gỡ lỗi. LNK2019: hủy bỏ
Trong C++, extern (không theo sau là chuỗi ký tự liên kết ngôn ngữ) dường như có một số ảnh hưởng đến phạm vi không gian tên (Sự khác biệt giữa khai báo hàm với extern và w
Giả sử tôi có 3 tệp: file1.c, file2.c và Globals.h. Cả file1.c và file2.c đều chứa Globals.h. file1.c chứa các cấu trúc mà file2.c cần sử dụng.
Tôi đang viết một trình cài đặt mới cho một trò chơi CD-ROM cũ có trình cài đặt 16-bit cần có trên ổ cứng và có thể sao chép các tệp từ đĩa gốc. Tôi đã thiết lập một tập lệnh có thể cài đặt trò chơi nếu tất cả các tệp trò chơi được đóng gói trong trình cài đặt, phù hợp với từng cá nhân.
Trong khi biên dịch mã của tôi, tôi gặp lỗi này. 1>MSVCRTD.lib(crtexe.obj): lỗi LNK2019: Ký hiệu bên ngoài chưa được giải quyết _main1>C:\U được tham chiếu trong hàm ___tmainCRTStartup
Tôi đang cố gắng gói thư viện cimg trong c++/clr và khi tôi cố gắng xây dựng nó, tôi gặp một loạt lỗi liên kết. Lỗi 20 lỗi LNK2028: token chưa được giải quyết (0A0002AC)
Tôi liên tục gặp phải hai lỗi này nhưng dường như tôi không thể tìm ra giải pháp hiệu quả. LNK1120: 1 bên ngoài chưa được giải quyết Lỗi 1 lỗi LNK2019: bên ngoài chưa được giải quyết
Tôi là một lập trình viên xuất sắc, rất giỏi!