2013-04-10 71 views

Trả lời

2

Đó là từ khóa C# cụ thể, COM cũng có trong cú pháp IDL. Tương đương trong MSVC++ là thuộc tính [out].

Nhưng không, trình biên dịch sẽ từ chối điều đó với C3115 nếu bạn cố gắng sử dụng nó. Hãy nhớ rằng bạn sử dụng phần mở rộng ngôn ngữ C++/CX để viết mã được sử dụng bởi các ngôn ngữ khác. Mà nói chung hỗ trợ cho khái niệm [ra] rất kém. Không hỗ trợ ngôn ngữ C++, Javascript hoặc .NET như vb.net. Bạn có thể thấy điều này trong các tệp .h trong C: \ Program Files (x86) \ Windows Kits \ 8.0 \ Include \ WinRT, được tạo từ các tệp .idl trong cùng thư mục có thuộc tính [out]. Nó bị tước trong tập tin .h bởi midl.

Dù sao thì mã của bạn cũng sẽ không được sử dụng nên không có lợi ích nào từ việc có thể tối ưu hóa tỷ lệ so khớp của giá trị đối số. Chỉ cần một con trỏ đơn giản được thực hiện công việc. Tuy nhiên, việc khởi tạo giá trị đối số trong mã C# là thất bại không thể tránh khỏi.

1

Bạn có thể sử dụng:

  1. _Out_opt_
  2. _Out_

Nhưng đây là chỉ dành cho tư nhân, nội bộ, và các thành viên bảo vệ AFAIK.

+1

Đây là các chú thích SAL và chỉ ảnh hưởng đến phân tích mã tĩnh. Trong trình biên dịch bình thường, họ đánh giá không có gì. –

9

Bất kỳ thông số nào thuộc loại T* (trong đó T là loại ABI hợp pháp) sẽ được trình biên dịch xử lý như tham số ngoài và được trang trí trong siêu dữ liệu như vậy. Các mã sau đây:

namespace TestMakePublic { 
public ref class Class1 sealed 
{ 
public: 
    void foo(int* out1, Object^* out2){} 
}; 
} 

Tạo một hàm trong siêu dữ liệu mà trông như thế này (đầu ra ildasm):

.method public hidebysig newslot virtual final 
     instance void foo([out] int32& out1, 
          [out] object& out2) runtime managed 
{ 
    .override TestMakePublic.__IClass1PublicNonVirtuals::foo 
} // end of method Class1::foo 

Lưu ý rằng WinRT không không hỗ trợ "in/out" các thông số, vì vậy giá trị của out1out2 chỉ hợp lệ để trả lại từ hàm và không thể tin cậy làm đầu vào cho foo .

+1

Câu trả lời hữu ích. Bạn có tham chiếu đến điều này trong tài liệu chính thức không? – bleater

Các vấn đề liên quan