Làm cách nào để gọi số WSAGetLastError()
từ WinAPI để tôi nhận được lỗi văn bản hợp lệ?Làm thế nào để có được lỗi cuối cùng (WSAGetLastError)?
Trả lời
[DllImport("ws2_32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern Int32 WSAGetLastError();
Ngoài ra, trên pinvoke.net nó nói:
Bạn sẽ không bao giờ PInvoke để GetLastError. Gọi Marshal.GetLastWin32Error để thay thế!
Sẽ không có ý nghĩa gì khi gọi hàm đó từ mã được quản lý. Nó có ý nghĩa trong mã không được quản lý bởi vì bạn biết chính xác hàm Win32 cuối cùng đã được gọi, vì vậy bạn biết hàm nào phải thiết lập lỗi cuối cùng. Trong mã được quản lý, bạn không biết chức năng nào đã được gọi.
Bạn có thể sử dụng P/Gọi để gọi hàm; nó sẽ không làm bạn tốt. Bạn đang cố gắng để thực hiện?
WSAGetLastError
chỉ là trình bao bọc cho hàm Win32 GetLastError
.
Nếu bạn đang làm việc với P/Invoke, bạn có thể sử dụng tham số SetLastError
cho thuộc tính DllImport
. Nó nói với .NET rằng hàm được nhập sẽ gọi SetLastError()
và giá trị đó sẽ được thu thập.
Nếu chức năng được nhập không thành công, bạn có thể gặp lỗi cuối cùng với Marshal.GetLastWin32Error()
. Ngoài ra, bạn chỉ có thể throw new Win32Exception()
, sử dụng giá trị này tự động.
Nếu bạn không làm việc với P/Invoke, bạn đã hết may mắn: không đảm bảo rằng giá trị lỗi cuối cùng sẽ được giữ nguyên đủ lâu để làm cho nó trở lại qua nhiều lớp mã .NET. Trong thực tế, tôi sẽ liên kết với Adam Nathan: never define a PInvoke signature for GetLastError.
Đây là cách tôi nhìn thấy trên web để đặt GetLastError vào C# ngoại lệ mechanismand làm thế nào để có được nó lại ra một lần nữa ...
try
{
// some p/invoke call that is going to fail with a windows error ...
mHndActivatedDevice = MyNameSpace.Interop.Device.Device.ActivateDevice(
"Drivers\\BuiltIn\\SomeDriverName", IntPtr.Zero, 0, IntPtr.Zero);
}
catch(System.ComponentModel.Win32Exception exc) // as suggested by John Saunders
{
// you can get the last error like this:
int lastError = System.Runtime.InteropServices.Marshal.GetLastWin32Error();
Console.WriteLine("error:" + lastError.ToString());
// but it is also inside the exception, you can get it like this
Console.WriteLine(exc.NativeErrorCode.ToString());
Console.WriteLine(exc.ToString());
}
nơi ActivateDevice được định nghĩa như sau:
-1: Mã nên bắt Win32Exception, không ngoại lệ. Nếu không, có một cơ hội của một số loại ngoại lệ khác bị bắt, sau đó trường hợp để Win32Exception thất bại. –
- 1. StringBuilder: làm thế nào để có được chuỗi cuối cùng?
- 2. Làm thế nào để có được hồ sơ cuối cùng
- 3. Làm cách nào để truy xuất chuỗi lỗi từ WSAGetLastError()?
- 4. Làm thế nào để nhận được thông báo lỗi MS SQL Server đầy đủ cuối cùng?
- 5. Làm thế nào để có được tài liệu được tạo cuối cùng trong couchdb?
- 6. Làm thế nào để có được ngày cuối cùng của tháng bằng cách sử dụng php
- 7. Làm thế nào để có được ngày cuối cùng của một tháng cụ thể với JodaTime?
- 8. làm thế nào để có được char cuối cùng của một chuỗi trong PHP?
- 9. Làm thế nào để có được các tài liệu N cuối cùng với mongoid?
- 10. Làm thế nào để có được giá trị của autoincrement của hàng cuối cùng tại chèn
- 11. Sql HierarchyId Làm thế nào để tôi có được con cháu cuối cùng?
- 12. Làm thế nào để có được thứ sáu cuối cùng của tháng (s) sử dụng .NET
- 13. Làm cách nào để có được bản ghi cuối cùng trước bản ghi cuối cùng trong mysql?
- 14. Làm thế nào để loại bỏ dấu phẩy cuối cùng?
- 15. Làm thế nào để in tín hiệu nhận được cuối cùng trong GDB?
- 16. Làm cách nào để có được màu sắc của hình cuối cùng trong matplotlib?
- 17. Nhận lỗi Javascript cuối cùng
- 18. Làm thế nào để tôi biết khi nào async cuối cùng được thực hiện?
- 19. Làm thế nào để kiểm tra khi nào autogrowth được thực hiện cuối cùng?
- 20. CSS3 có được yếu tố cuối cùng
- 21. Trong thực tế, làm thế nào cuối cùng là "sự nhất quán cuối cùng" trong HRD?
- 22. Làm thế nào để tạm dừng video youtube được nhúng vào khung hình cuối cùng?
- 23. Làm thế nào để kiểm tra hồ bơi ứng dụng cuối cùng được tái chế
- 24. Làm cách nào để có được 50 tài liệu cuối cùng trong mongoDB?
- 25. Làm thế nào để hiển thị các truy vấn cuối cùng được thực hiện trên MySQL?
- 26. Làm thế nào để tách một chuỗi và nhận được kết quả cuối cùng trong jQuery?
- 27. Làm thế nào để đạt được vào cuối của TextArea
- 28. Android: làm cách nào để có được chi tiết vị trí 50 ô (tháp) cuối cùng?
- 29. Làm cách nào để có tùy chọn được chọn cuối cùng từ nhiều lựa chọn?
- 30. Làm cách nào để có được 7 ký tự cuối cùng của một chuỗi PHP?
мерси! Comment.Length = 10; –