Có sự khác biệt nào giữa việc sử dụng [In, Out] và chỉ sử dụng ref khi truyền tham số từ C# đến C++?Sự khác nhau giữa [In, Out] và ref khi sử dụng pinvoke trong C# là gì?
Tôi đã tìm thấy một vài bài đăng SO khác nhau và một số nội dung từ MSDN cũng đến gần với câu hỏi của tôi nhưng không hoàn toàn trả lời. Tôi đoán là tôi có thể sử dụng ref một cách an toàn giống như tôi sẽ sử dụng [In, Out], và marshaller sẽ không hành động khác. Mối quan tâm của tôi là nó sẽ hành động khác nhau, và rằng C + + sẽ không được hạnh phúc với C# struct của tôi được thông qua. Tôi đã nhìn thấy cả những điều thực hiện trong cơ sở mã Tôi đang làm việc tại ...
Sau đây là các bài viết tôi đã tìm thấy và đã được đọc qua:
Are P/Invoke [In, Out] attributes optional for marshaling arrays? Làm cho tôi nghĩ rằng tôi nên sử dụng [ Vào, Ra].
Ba bài viết làm cho tôi nghĩ rằng tôi nên sử dụng [In, Out], nhưng mà tôi có thể sử dụng ref thay vào đó và nó sẽ có cùng mã máy. Điều đó làm cho tôi nghĩ rằng tôi sai - do đó yêu cầu ở đây.
Bạn có thể đưa ra ví dụ cụ thể hay không. Bạn có muốn biết sự khác biệt giữa '[In, Out] ref int foo' và' ref int foo' không? Vì nó là viết tắt, câu hỏi của bạn là thiếu chi tiết, và tôi tin rằng bạn cần một (hoặc nhiều hơn) ví dụ cụ thể. –
Một cái gì đó như, là: [DllImport ("MyDll.dll", CallingConvention = CallingConvention.Cdecl)] private static extern bool myFunction ([In, Out] SomeStruct [] aStruct; giống như sử dụng ref thay cho [In – PerryC
Ngoài ra, bạn vừa kết hợp [In, Out] và ref;)? – PerryC