Tôi đang triển khai giao diện COM sẽ trả về giá trị int là S_OK
hoặc E_FAIL
. Tôi ok trả lại S_OK
khi tôi nhận lại điều đó từ một cuộc gọi khác (Marshal.QueryInterface), nhưng nếu tôi muốn trả lại giá trị thất bại, tôi sẽ sử dụng giá trị thực nào cho E_FAIL
?Giá trị nào cần trả lại cho S_OK hoặc E_FAIL từ mã C# .net?
(Đó là một câu hỏi cơ bản cơ bản như vậy mà nó thật khó để tìm câu trả lời cho)
Giả sử nó là một con số cụ thể được định nghĩa trong Win32 API, là có cách để sử dụng nó trong mã .net mà không tuyên bố liên tục của riêng tôi ?
cảm ơn!
Cập nhật (trả lời dưới đây):
Có lẽ tôi là một plonker hoàn chỉnh, nhưng tôi đang gặp vấn đề với điều này. Theo SDK nền tảng của tôi, HRESULT là LONG, là số nguyên có ký hiệu 32 bit, phải không? Vì vậy, giá trị có thể là -247,483,648 đến 2,147,483,647. Nhưng 0x80004005 = 2.147.500.037 là> 2.147.483.647. Đưa cái gì!?
Điều này có nghĩa khi tôi cố gắng đặt điều này trong mã của tôi:
const int E_FAIL = 0x80004005;
tôi nhận được một lỗi biên dịch có thể không mặc nhiên chuyển đổi loại 'uint' thành 'int'.
Cập nhật 2:
Tôi sẽ phải khai báo nó như thế này:
const int E_FAIL = -2147467259;
vì nếu tôi cố gắng làm một cái gì đó như thế này:
const UInt32 E_FAIL = 0x80004005;
return (Int32)E_FAIL;
tôi nhận được một lỗi biên dịch Giá trị không đổi '2147500037' không thể được chuyển đổi sang 'int' (sử dụng cú pháp 'bỏ chọn' để ghi đè)
Phew! Ai biết nó sẽ phức tạp thế nào để khai báo một giá trị trả về chuẩn .... Một nơi nào đó phải có một lớp ẩn nấp mà tôi nên sử dụng như trả về Win32ReturnCodes.E _
FAIL; ... phào nhẹ
ULTIMATE SOLUTION:
bây giờ tôi làm điều này bằng nhận được (đồ sộ nhưng rất hữu ích) HRESULT enum từ pinvoke.net và thêm nó vào giải pháp của tôi. Sau đó sử dụng nó một cái gì đó như thế này:
return HRESULT.S_OK;
cảm ơn vì tất cả sự giúp đỡ! – Rory
Liên kết đã chết, xem [Giá trị HRESULT phổ biến tại đây] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa378137 (v = vs.85) .aspx) – bland
Tôi đã cập nhật liên kết cho 'winerror.h', có rất nhiều tài liệu tham khảo, chỉ trong trường hợp ngắt liên kết lại, tìm kiếm rất đơn giản sẽ nhận được nó (nếu bạn đã có trình biên dịch C++ trên máy của mình thì có thể là một WinError.h tập tin đó) –