CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 593

593

Chương 15: Khả năng liên tác mã lệnh không-được-quản-lý

[FieldOffset(4)] public int dwMajorVersion;

[FieldOffset(8)] public int dwMinorVersion;

[FieldOffset(12)] public int dwBuildNumber;

[FieldOffset(16)] public int dwPlatformId;

[MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)]

[FieldOffset(20)] public String szCSDVersion;

}

Sau khi đã định nghĩa cấu trúc được sử dụng bởi hàm

GetVersionEx

, bạn có thể khai báo hàm

này và sử dụng nó. Ứng dụng dưới đây sẽ trình bày toàn bộ mã lệnh cần thiết. Chú ý,

InAttribute

OutAttribute

được áp dụng cho

OSVersionInfo

để biết rằng marshalling sẽ

được thực hiện trên cấu trúc này khi nó được truyền cho hàm và khi nó được trả về từ hàm.
Ngoài ra, phương thức

Marshal.SizeOf

được sử dụng để tính kích thước của cấu trúc trong bộ

nhớ.

using 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();

}

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.