2010-03-01 35 views

Trả lời

2

Thư viện C++ có thể là P/được gọi, nhưng bạn sẽ cần phải sử dụng "phụ thuộc" để tìm tên phương thức bị xâu (tên như "@ 0! Classname @ classname @ zz") và các phương pháp ví dụ sử dụng "ThisCall" gọi quy ước trong p/gọi và vượt qua tham chiếu của cá thể như đối số đầu tiên (bạn có thể lưu trữ kết quả của hàm tạo trong một IntPtr).

+5

Một giải pháp thay thế khác là C++/CLI. –

+3

Đây là lời khuyên khủng khiếp. Ngay cả khi nó là kỹ thuật có thể, bạn sẽ gặp nhiều vấn đề MANY cố gắng p/gọi vào các lớp C++. Ví dụ, các hàm tạo và các trình phá hủy sẽ không được gọi đúng cách, xử lý bộ nhớ .NET không tương thích với C++ 'new' và' delete', v.v. C++/CLI là một ý tưởng tốt hơn nhiều. –

+0

làm thế nào điều này có thể là câu trả lời ?! –

1

Thư viện C++ "tinh khiết" sẽ có tên của nó được trình biên dịch cắt xén, vì vậy sẽ rất khó để có được khai báo P/Invoke chính xác. Và phương thức C nhận được dấu gạch dưới ở đầu, có thể không có trong C++. Và phương pháp C++ cần một ví dụ này làm tham số đầu tiên, bạn phải tự mình cung cấp.

Tôi nghĩ rằng bạn cần bọc C++ API của bạn trong một loạt các phương pháp tương thích với C.

+0

Chỉ một phương pháp thể hiện của đối tượng có một 'this' ẩn. –

+0

Tất nhiên, nhưng tôi không thể tưởng tượng một thư viện C++ chỉ sử dụng các phương thức tĩnh. – Timores

+0

C++ cũng cho phép các thành viên không phải là thành viên. – jalf

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