Tôi có phương thức thư viện C++ mà tôi muốn gọi từ tập lệnh Unity C#.Chuyển mảng byte từ Unity C# sang phương thức thư viện C++
Tôi hiểu rằng có ba bước chính. Đầu tiên, để khai báo các phương thức C++ là extern "C"
. Thứ hai, sử dụng trước khi khai báo phương thức extern C# tương ứng. Thứ ba, đặt tên cho tệp thư viện bằng tiền tố lib (ví dụ: libfoobar.so
) và đặt nó vào thư mục plugin Unity.
Cho đến nay rất tốt - nếu tôi chỉ chuyển các loại thông số đơn giản như int
từ C# vào C++. Tuy nhiên, để vượt qua một tham số byte[]
, tôi sẽ cần tính đến các cách khác nhau C# và C++ xử lý bộ nhớ và con trỏ. Tôi đã không thể tìm thấy một ví dụ dứt khoát về cách này nên được thực hiện.
Câu hỏi của tôi: cách chuyển một số byte[]
từ tập lệnh Unity C# vào một phương thức thư viện C++ bên ngoài?
Đây có phải là P/phương thức Invoke? Bạn cũng có thể sử dụng C++ CLI. Tôi đã nghe nói rằng C + + CLI cho phép bạn kiểm soát nhiều hơn. Nhưng, tôi chưa bao giờ làm điều đó. Mang nó theo một hạt muối. –
Đừng quên 'CallingConvention = CallingConvention.Cdecl' từ DllImport của bạn vì bạn đang sử dụng' extern "C" ' – cubrr
@Golazo - không sử dụng P/Invoke, chỉ cần khai báo C++ extern là' extern "C" 'và tham chiếu nó từ C# thông qua thuộc tính 'DllImport'. Không cần lệnh P/Invoke, ít nhất là không truyền các kiểu tham số đơn giản. – Ghopper21