![Phân tích tư tưởng của nhân dân qua đoạn thơ: Những người vợ nhớ chồng… Những cuộc đời đã hóa sông núi ta trong Đất nước của Nguyễn Khoa Điềm](https://timtailieu.net/upload/document/136415/phan-tich-tu-tuong-cua-nhan-dan-qua-doan-tho-039-039-nhung-nguoi-vo-nho-chong-nhung-cuoc-doi-da-hoa-song-nui-ta-039-039-trong-dat-nuoc-cua-nguyen-khoa-136415.jpg)
Khả năng liên tác và mã lệnh không được quản lý Microsoft .NET phần cuối
Số trang: 12
Loại file: pdf
Dung lượng: 201.70 KB
Lượt xem: 17
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
(Bỏ qua lớp OSVersionInfo.) [DllImport("kernel32.dll")] public static extern bool GetVersionEx([In, Out] OSVersionInfo osvi); private static void Main()
Nội dung trích xuất từ tài liệu:
Khả năng liên tác và mã lệnh không được quản lý Microsoft .NET phần cuốiusing System;using System.Runtime.InteropServices;public class CallWithStructure { // (Bỏ qua lớp OSVersionInfo.) [DllImport(kernel32.dll)] public static extern bool GetVersionEx([In, Out] OSVersionInfo osvi); private static void Main() { OSVersionInfo osvi = new OSVersionInfo(); osvi.dwOSVersionInfoSize = Marshal.SizeOf(osvi); GetVersionEx(osvi); Console.WriteLine(Class size: + osvi.dwOSVersionInfoSize); Console.WriteLine(Major Version: + osvi.dwMajorVersion); Console.WriteLine(Minor Version: + osvi.dwMinorVersion); Console.WriteLine(Build Number: + osvi.dwBuildNumber); Console.WriteLine(Platform Id: + osvi.dwPlatformId); Console.WriteLine(CSD Version: + osvi.szCSDVersion); Console.WriteLine(Platform: + Environment.OSVersion.Platform); Console.WriteLine( Version: + Environment.OSVersion.Version); Console.ReadLine(); }}Nếu chạy ứng dụng này trên hệ thống Windows XP, bạn sẽ thấy thông tin như sau:Class size: 148Major Version: 5Minor Version: 1Build Number: 2600Platform Id: 2CSD Version: Service Pack 1Platform: Win32NTVersion: 5.1.2600.0 1.1 Gọi một hàm không-được-quản-lý có sử dụng callback Bạn cần gọi một hàm không-được-quản-lý và cho phép nó gọi một hàm khác. Tạo một ủy nhiệm cho callback. Sử dụng ủy nhiệm này khi định nghĩa và sử dụng hàm không-được-quản-lý.Nhiều hàm của Win32 API sử dụng callback. Ví dụ, nếu muốn lấy tên của tất cả các cửasổ đang mở, bạn có thể sử dụng hàm EnumWindows trong thư viện user32.dll . Khi gọiEnumWindows, bạn cần truyền cho nó một con trỏ chỉ đến một hàm khác trong mã lệnhcủa bạn. Hệ điều hành Windows sau đó sẽ gọi hàm này mỗi khi tìm thấy một cửa sổ đangmở, và truyền handle của cửa sổ cho nó..NET Framework cho phép bạn quản lý việc sử dụng callback mà không cần các con trỏvà các khối mã không an toàn. Thay vào đó, bạn có thể định nghĩa và sử dụng một ủynhiệm chỉ đến hàm callback. Khi bạn truyền ủy nhiệm cho hàm EnumWindows, CLR sẽtự động marshal ủy nhiệm thành con trỏ hàm không-được-quản-lý như mong muốn.Ví dụ dưới đây sử dụng EnumWindows cùng với một callback để hiển thị tên của tất cảcác cửa sổ đang mở.using System;using System.Text;using System.Runtime.InteropServices;public class GetWindows { // Chữ ký cho hàm callback. public delegate bool CallBack(int hwnd, int lParam); // Hàm không-được-quản-lý sẽ kích hoạt callback // khi duyệt qua các cửa sổ đang mở. [DllImport(user32.dll)] public static extern int EnumWindows(CallBack callback, int param); [DllImport(user32.dll)] public static extern int GetWindowText(int hWnd, StringBuilder lpString, int nMaxCount); private static void Main() { CallBack callBack = new CallBack(DisplayWindowInfo); // Yêu cầu hệ điều hành duyệt qua các cửa sổ đang mở, // kích hoạt callback với handle của mỗi cửa sổ. EnumWindows(callBack, 0); Console.ReadLine(); } // Hàm sẽ nhận callback. Thông số thứ hai // không được sử dụng nhưng phải được khai báo để // tương thích với chữ ký của callback. public static bool DisplayWindowInfo(int hWnd, int lParam) { int chars = 100; StringBuilder buf = new StringBuilder(chars); if (GetWindowText(hWnd, buf, chars) != 0) { Console.WriteLine(buf); } return true; }} 1.2 Lấy thông tin lỗi không-được-quản-lý Bạn cần truy xuất thông tin lỗi (mã lỗi hoặc thông điệp mô tả lỗi) giải thích tại sao một lời gọi Win32 API thất bại. Trong phần khai báo của hàm không-được-quản-lý, thiết lập trường SetLastError của đặc tính DllImportAttribute là true. Nếu có lỗi khi thực thi, gọi phương thức tĩnh Marshal.GetLastWin32Error để truy xuất mã lỗi. Để lấy thông điệp mô tả một mã lỗi cụ thể, sử dụng hàm không-được-quản-lý FormatMessage.Bạn không thể trực tiếp lấy thông tin lỗi bằng hàm không-được-quản-lý GetLastError.Vấn đề là, mã lỗi do GetLastError trả về có thể không phản ánh lỗi do hàm không-được-quản-lý gây ra. Thay vào đó, nó có thể được thiết lập bởi các lớp .NET Framework kháchoặc CLR. Bạn có thể lấy thông tin lỗi một cách an toàn bằng phương thức tĩnhMarshal.GetLastWin32Error. Phương thức này cần được gọi ngay sau lời gọi hàm không-được-quản-lý, và nó sẽ trả về thông tin lỗi chỉ một lần (các lần gọi GetLastWin32Errorsau đó sẽ trả về mã lỗi 127). Ngoài ra, bạn phải thiết lập trường SetLastError của đặc tínhDllImportAttribute là true, cho biết những lỗi do hàm này sinh ra sẽ được ghi nhận.[DllImport(user32.dll, SetLastError=true)]Sau đó, bạn có thể sử dụng hàm FormatMessage trong thư viện kernel32.dll để lấy thôngđiệp mô tả lỗi từ mã lỗi Win32.Ví dụ, ứng dụng dưới đây muốn hiển thị một MessageBox, nhưng lại sử d ...
Nội dung trích xuất từ tài liệu:
Khả năng liên tác và mã lệnh không được quản lý Microsoft .NET phần cuốiusing System;using System.Runtime.InteropServices;public class CallWithStructure { // (Bỏ qua lớp OSVersionInfo.) [DllImport(kernel32.dll)] public static extern bool GetVersionEx([In, Out] OSVersionInfo osvi); private static void Main() { OSVersionInfo osvi = new OSVersionInfo(); osvi.dwOSVersionInfoSize = Marshal.SizeOf(osvi); GetVersionEx(osvi); Console.WriteLine(Class size: + osvi.dwOSVersionInfoSize); Console.WriteLine(Major Version: + osvi.dwMajorVersion); Console.WriteLine(Minor Version: + osvi.dwMinorVersion); Console.WriteLine(Build Number: + osvi.dwBuildNumber); Console.WriteLine(Platform Id: + osvi.dwPlatformId); Console.WriteLine(CSD Version: + osvi.szCSDVersion); Console.WriteLine(Platform: + Environment.OSVersion.Platform); Console.WriteLine( Version: + Environment.OSVersion.Version); Console.ReadLine(); }}Nếu chạy ứng dụng này trên hệ thống Windows XP, bạn sẽ thấy thông tin như sau:Class size: 148Major Version: 5Minor Version: 1Build Number: 2600Platform Id: 2CSD Version: Service Pack 1Platform: Win32NTVersion: 5.1.2600.0 1.1 Gọi một hàm không-được-quản-lý có sử dụng callback Bạn cần gọi một hàm không-được-quản-lý và cho phép nó gọi một hàm khác. Tạo một ủy nhiệm cho callback. Sử dụng ủy nhiệm này khi định nghĩa và sử dụng hàm không-được-quản-lý.Nhiều hàm của Win32 API sử dụng callback. Ví dụ, nếu muốn lấy tên của tất cả các cửasổ đang mở, bạn có thể sử dụng hàm EnumWindows trong thư viện user32.dll . Khi gọiEnumWindows, bạn cần truyền cho nó một con trỏ chỉ đến một hàm khác trong mã lệnhcủa bạn. Hệ điều hành Windows sau đó sẽ gọi hàm này mỗi khi tìm thấy một cửa sổ đangmở, và truyền handle của cửa sổ cho nó..NET Framework cho phép bạn quản lý việc sử dụng callback mà không cần các con trỏvà các khối mã không an toàn. Thay vào đó, bạn có thể định nghĩa và sử dụng một ủynhiệm chỉ đến hàm callback. Khi bạn truyền ủy nhiệm cho hàm EnumWindows, CLR sẽtự động marshal ủy nhiệm thành con trỏ hàm không-được-quản-lý như mong muốn.Ví dụ dưới đây sử dụng EnumWindows cùng với một callback để hiển thị tên của tất cảcác cửa sổ đang mở.using System;using System.Text;using System.Runtime.InteropServices;public class GetWindows { // Chữ ký cho hàm callback. public delegate bool CallBack(int hwnd, int lParam); // Hàm không-được-quản-lý sẽ kích hoạt callback // khi duyệt qua các cửa sổ đang mở. [DllImport(user32.dll)] public static extern int EnumWindows(CallBack callback, int param); [DllImport(user32.dll)] public static extern int GetWindowText(int hWnd, StringBuilder lpString, int nMaxCount); private static void Main() { CallBack callBack = new CallBack(DisplayWindowInfo); // Yêu cầu hệ điều hành duyệt qua các cửa sổ đang mở, // kích hoạt callback với handle của mỗi cửa sổ. EnumWindows(callBack, 0); Console.ReadLine(); } // Hàm sẽ nhận callback. Thông số thứ hai // không được sử dụng nhưng phải được khai báo để // tương thích với chữ ký của callback. public static bool DisplayWindowInfo(int hWnd, int lParam) { int chars = 100; StringBuilder buf = new StringBuilder(chars); if (GetWindowText(hWnd, buf, chars) != 0) { Console.WriteLine(buf); } return true; }} 1.2 Lấy thông tin lỗi không-được-quản-lý Bạn cần truy xuất thông tin lỗi (mã lỗi hoặc thông điệp mô tả lỗi) giải thích tại sao một lời gọi Win32 API thất bại. Trong phần khai báo của hàm không-được-quản-lý, thiết lập trường SetLastError của đặc tính DllImportAttribute là true. Nếu có lỗi khi thực thi, gọi phương thức tĩnh Marshal.GetLastWin32Error để truy xuất mã lỗi. Để lấy thông điệp mô tả một mã lỗi cụ thể, sử dụng hàm không-được-quản-lý FormatMessage.Bạn không thể trực tiếp lấy thông tin lỗi bằng hàm không-được-quản-lý GetLastError.Vấn đề là, mã lỗi do GetLastError trả về có thể không phản ánh lỗi do hàm không-được-quản-lý gây ra. Thay vào đó, nó có thể được thiết lập bởi các lớp .NET Framework kháchoặc CLR. Bạn có thể lấy thông tin lỗi một cách an toàn bằng phương thức tĩnhMarshal.GetLastWin32Error. Phương thức này cần được gọi ngay sau lời gọi hàm không-được-quản-lý, và nó sẽ trả về thông tin lỗi chỉ một lần (các lần gọi GetLastWin32Errorsau đó sẽ trả về mã lỗi 127). Ngoài ra, bạn phải thiết lập trường SetLastError của đặc tínhDllImportAttribute là true, cho biết những lỗi do hàm này sinh ra sẽ được ghi nhận.[DllImport(user32.dll, SetLastError=true)]Sau đó, bạn có thể sử dụng hàm FormatMessage trong thư viện kernel32.dll để lấy thôngđiệp mô tả lỗi từ mã lỗi Win32.Ví dụ, ứng dụng dưới đây muốn hiển thị một MessageBox, nhưng lại sử d ...
Tìm kiếm theo từ khóa liên quan:
công nghệ thông tin kĩ thuật lập trình ngôn ngữ lập trình ngôn ngữ C# C# Khả năng liên tác và mã lệnh không được quản lý Microsoft .NET phần cuốiTài liệu liên quan:
-
52 trang 439 1 0
-
Top 10 mẹo 'đơn giản nhưng hữu ích' trong nhiếp ảnh
11 trang 329 0 0 -
74 trang 309 0 0
-
96 trang 305 0 0
-
Báo cáo thực tập thực tế: Nghiên cứu và xây dựng website bằng Wordpress
24 trang 299 0 0 -
Đồ án tốt nghiệp: Xây dựng ứng dụng di động android quản lý khách hàng cắt tóc
81 trang 291 0 0 -
Tài liệu dạy học môn Tin học trong chương trình đào tạo trình độ cao đẳng
348 trang 291 1 0 -
Giáo trình Lập trình hướng đối tượng: Phần 2
154 trang 282 0 0 -
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 279 0 0 -
EBay - Internet và câu chuyện thần kỳ: Phần 1
143 trang 278 0 0