Có cách nào để tự động tạo p/gọi trình bao bọc cho .net từ tiêu đề c không?Tự động tạo trình bao bọc C# từ tiêu đề c?
Tất nhiên tôi có thể tạo chúng bằng tay, nhưng việc duy trì chúng sẽ rất đau đớn và có thể tôi sẽ phạm sai lầm ở đâu đó sẽ gây khó khăn cho việc gỡ lỗi.
Tôi đã thử SWIG, nhưng nó đã tạo ra các lớp đầy đủ, nơi các cấu trúc đơn giản sẽ là đủ. Một vấn đề khác với SWIG là nó yêu cầu mã interop bổ sung ở phía c.
Tôi thích nếu đầu ra hoạt động trên mono quá, nhưng điều đó là không cần thiết.
Một thứ khác mà tôi có thể làm là chương trình phân tích tiêu đề c và tạo đầu ra ở định dạng trung gian đẹp như xml, từ đó tôi có thể tự tạo C# wrapper.
Chỉnh sửa:
Trợ giúp tương tác PInvoke là những gì tôi cần.
Có một số vấn đề nhỏ với nó:
* Nó dịch "unsigned char *" thành chuỗi nơi tôi muốn IntPtr
* Giả định rằng size_t = int = long = 32bit. Điều này hiện đúng với tôi, nhưng có thể không đúng trên mọi nền tảng.
Có cách nào hiệu quả để khắc phục điều đó không? Khác tôi sẽ sử dụng một chút tìm và thay thế trên mã c trước khi chuyển đổi nó.
Tôi đồng ý với Trợ lý tương tác. Hãy nhận biết rằng GUI có một lỗi gây phiền nhiễu (giới hạn độ dài, phiền phức nếu bạn muốn dịch nhiều tập tin tiêu đề) và mã C# được tạo ra cho bitfields không chỉ thực sự xấu, mà còn sai (tức là bạn * phải * xác minh mã trường bit bằng tay). Đối với bất cứ điều gì ngoại trừ các lĩnh vực bit, tôi thấy nó hoạt động tốt, mặc dù điều đầu tiên tôi làm với mã là loại bỏ các không gian tên dài ('System.Runtime.InteropServices' cho mỗi thuộc tính). – OregonGhost
Có một số vấn đề nhỏ với nó. Nó dịch "unsigned char *" thành chuỗi nơi tôi muốn IntPtr, và giả định rằng int = long = 32bit. Có cách nào sạch sẽ để khắc phục điều đó không? Khác tôi sẽ sử dụng một chút tìm và thay thế trên mã c trước khi chuyển đổi nó. – Winner
Đó là những sự mơ hồ mà tôi đã cảnh báo bạn. Không có cách nào sạch sẽ, việc phải khai báo P/Invoke được tạo ra là bình thường. Btw: int và long là 32 bit trong hầu hết mã C/C++. –