Tôi đang cố chuyển cấu trúc từ thư viện C# vào C++. Tôi chuyển cấu trúc như một đối tượng, và hàm C++ mong đợi nó như một con trỏ (void *).Làm cách nào để tôi sắp xếp cấu trúc dưới dạng con trỏ tới cấu trúc?
Tôi gặp sự cố khi chuyển cấu trúc.
[DllImport("MockVadavLib.dll", CharSet = CharSet.Ansi)]
public static extern IntPtr TheFunction([MarshalAs(UnmanagedType.LPStruct)] UserRec userRec);
Dưới đây là ngoại lệ văn bản thời gian chạy tôi nhận được:
"Không thể marshal 'tham số # 1': không hợp lệ quản lý/kết hợp kiểu không được quản lý (loại giá trị này phải được ghép nối với Struct). "
Mặc dù tôi đã tìm thấy một bài viết MSDN sử dụng LPStruct trong chính xác ngữ cảnh này.
Đây là cấu trúc của tôi, tôi đang cố gắng để soái:
[StructLayout(LayoutKind.Sequential)]
public struct UserRec {
[MarshalAs(UnmanagedType.I4)]
public int userParam1;
}
Đây là hàm C++:
MOCKVADAVLIB_API tVDACQ_CallBackRec * TheFunction(void * userParams) {...
Bạn thậm chí không cần [MarshalAs] trong trường hợp này tôi nghĩ. –
@Anton, bạn chính xác (cập nhật) – JaredPar
Kết quả làm việc kết thúc: public static extern IntPtr TheFunction ([MarshalAs (UnmanagedType.Struct), In] ref UserRec userRec); Và [MurshalAs] ở đây chỉ để làm cho nó rõ ràng, nhưng không bắt buộc. –