Hãy nói rằng tôi có cấu trúc như sau trong C++C# marshaling C++ struct thừa kế
struct Base
{
USHORT size;
}
struct Inherited : public Base
{
BYTE type;
}
Tôi muốn marshal Inherited
trong C# nhưng thừa kế struct không hoạt động trong C#. Làm như sau thích hợp?
public interface IBase
{
ushort Size { get; set; }
}
[StructLayout(LayoutKind.Sequential)]
public struct Inherited : IBase
{
public ushort Size { get; set; }
public byte Type { get; set; }
}
Tôi đã đơn giản hóa vấn đề ở đây và các cấu trúc của tôi lớn hơn khiến việc xác thực kết quả trở nên khó khăn hơn. Ngoài ra, các cấu trúc đến từ một phần mềm khác không phải là tài liệu quá tốt khiến việc xác thực kết quả thậm chí còn khó hơn nữa. Khi sử dụng thừa kế trong C + +, là các trường lớp cơ sở trước hoặc sau cấu trúc con?
Tôi đang sử dụng IBase
làm cách để thực thi các trường cơ sở.
Thật không may, tôi không có quyền kiểm soát bên C++ (SDK cho hệ thống bên ngoài mà tôi tích hợp với).
Tôi nghĩ rằng nó không phải là bất hợp lý để mong đợi cơ sở cơ bản để đến đầu tiên trong bố trí bộ nhớ C++, như thể nó là thành viên đầu tiên (nhưng tôi không nghĩ rằng nó được chuẩn hóa). Bạn đã thử chưa? –
@TheodorosChatzigiannakis Có tất nhiên tôi đã thử và chạy mã nhưng như tôi đã nói: "[...] cấu trúc của tôi là cách lớn hơn làm cho nó khó khăn để xác nhận kết quả." Đó là lý do tại sao tôi đang cố gắng để xác nhận hypotesis của tôi. Cảm ơn bạn đã nhập! – KOTIX
Có lẽ bạn nên sử dụng các trường thay vì các thuộc tính, nhưng tôi không biết điều này có hiệu quả hay không. –