Khả năng liên tác và mã lệnh không được quản lý Microsoft .NET phần đầu
Số trang: 8
Loại file: pdf
Dung lượng: 185.70 KB
Lượt xem: 10
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:
Khả năng liên tác và mã lệnh không được quản lý Microsoft .NET Framework là một nền cực kỳ cao vọng, là sự kết hợp của một ngôn ngữ mới (C#), một bộ thực thi được-quản-lý (CLR)
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 đầuChương 15 : Khả năng liên tác và mã lệnh không được quản lýMicrosoft .NET Framework là một nền cực kỳ cao vọng, là sự kết hợp của một ngôn ngữmới (C#), một bộ thực thi được-quản-lý (CLR), một nền cho các ứng dụng Web(Microsoft ASP.NET), và một thư viện lớp rất lớn để xây dựng tất cả các kiểu ứng dụng.Tuy nhiên, .NET Framework không lặp lại các tính năng có trong mã lệnh không-được-quản-lý. Hiện thời, .NET Framework không bao gồm mọi hàm có trong Win32 API, trongkhi nhiều doanh nghiệp đang sử dụng các giải pháp phức tạp được xây dựng với các ngônngữ dựa-trên-COM như Microsoft Visual Basic 6 và Microsoft Visual C++ 6. May mắnlà Microsoft không có ý để những doanh nghiệp đó bỏ đi nền tảng mã lệnh mà họ đã xâydựng khi chuyển sang nền .NET. Thay vào đó, .NET Framework được trang bị với cáctính năng interoperability (khả năng liên tác), cho phép bạn sử dụng lại mã lệnh cũ(legacy code) trong các ứng dụng .NET Framework và truy xuất các assembly .NET nhưthể chúng là các thành phần COM. Chương này sẽ thảo luận các vấn đề sau: Cách gọi các hàm thuộc DLL không-được-quản-lý (mục 15.1 đến 15.5). Cách sử dụng thành phần COM trong ứng dụng .NET Framework (mục 15.6 đến 15.8). Cách sử dụng điều kiểm ActiveX trong ứng dụng .NET Framework (mục 15.9). Cách tạo một thành phần .NET sao cho một COM-client có thể sử dụng nó (mục 15.10). 1.1 Gọi một hàm trong một DLL không-được-quản-lý Bạn cần gọi một hàm C trong một DLL. Đây có thể là một hàm của Win32 API hoặc do bạn viết. Khai báo một phương thức trong mã C# mà bạn sẽ sử dụng để truy xuất hàm không-được-quản-lý. Khai báo phương thức này là static và extern, áp dụng đặc tính System.Runtime.InteropServices.DllImportAttribute để chỉ định file DLL và tên của hàm cần dùng.Để sử dụng một hàm C từ một thư viện ngoài, bạn chỉ cần khai báo nó một cách thíchhợp. CRL sẽ tự động đảm trách phần việc còn lại, bao gồm việc tải DLL vào bộ nhớ khihàm được gọi và chuyển các thông số từ kiểu dữ liệu .NET thành kiểu dữ liệu C.Dịch vụ .NET hỗ trợ việc thực thi xuyên-nền này có tên là PInvoke (Platform Invoke), vàquá trình này thường là trong suốt đối với người sử dụng. Thỉnh thoảng, bạn sẽ cần thựchiện thêm một số việc, chẳng hạn cần hỗ trợ cấu trúc trong-bộ-nhớ (in-memorystructure), callback, hay chuỗi có thể thay đổi (mutable string).PInvoke thường được sử dụng để truy xuất các hàm Win32 API, đặc biệt là các tính năngkhông có trong các lớp được-quản-lý thuộc .NET Framework. Các ví dụ được trình bàytrong chương này sẽ sử dụng PInvoke theo cách này. Có ba thư viện chính trong Win32API: • kernel32.dll⎯gồm các hàm đặc-trưng-hệ-điều-hành như nạp tiến trình, chuyển ngữ cảnh, nhập/xuất file và bộ nhớ. • user32.dll⎯gồm các hàm dùng để thao tác cửa sổ, trình đơn, hộp thoại, biểu tượng,… • gdi32.dll⎯gồm các hàm đồ họa dùng để để vẽ trực tiếp lên cửa sổ, trình đơn, bề mặt điều kiểm, cũng như để in ấn.Ví dụ, xét các hàm Win32 API dùng để đọc và ghi các file INI, chẳng hạnGetPrivateProfileString và WritePrivateProfileString trong kernell32.dll. .NETFramework không có lớp nào bọc lấy chức năng này. Tuy nhiên, có thể nhập các hàmnày bằng đặc tính DllImportAttribute như sau:[DllImport(kernel32.DLL, EntryPoint=WritePrivateProfileString)]private static extern bool WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);Các đối số trong phương thức WritePrivateProfileString phải tương thích với hàm trongDLL, nếu không sẽ có lỗi khi gọi nó. Vì phương thức WritePrivateProfileString đượckhai báo để tham chiếu đến một hàm trong DLL nên bạn không được viết mã cho nó.Phần EntryPoint trong đặc tính DllImportAttribute trong ví dụ này là tùy chọn, vì tênphương thức được khai báo đã trùng với tên của hàm trong thư viện ngoài.Trong ví dụ sau, lớp IniFileWrapper khai báo các phương thức riêng tham chiếu tới cáchàm Win32 API, sau đó gọi chúng từ các phương thức công khai khác dựa trên file đượcchỉ định:using System;using System.Text;using System.Runtime.InteropServices;using System.Windows.Forms;public class IniFileWrapper { private string filename; public string Filename { get {return filename;} }public IniFileWrapper(string filename) { this.filename = filename;}[DllImport(kernel32.dll, EntryPoint=GetPrivateProfileString)]private static extern int GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);[DllImport(kernel32.dll, EntryPoint=WritePrivateProfileString)]private static extern bool WritePrivateProfileString( string lpAppName, string lpKeyName, string lpString, string lpFileName);// Bốn hàm sau không được sử dụng trong ví dụ này,// nhưng được khai báo cho đầy đủ.[DllImport(kernel32.dll, EntryPoint=WritePriva ...
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 đầuChương 15 : Khả năng liên tác và mã lệnh không được quản lýMicrosoft .NET Framework là một nền cực kỳ cao vọng, là sự kết hợp của một ngôn ngữmới (C#), một bộ thực thi được-quản-lý (CLR), một nền cho các ứng dụng Web(Microsoft ASP.NET), và một thư viện lớp rất lớn để xây dựng tất cả các kiểu ứng dụng.Tuy nhiên, .NET Framework không lặp lại các tính năng có trong mã lệnh không-được-quản-lý. Hiện thời, .NET Framework không bao gồm mọi hàm có trong Win32 API, trongkhi nhiều doanh nghiệp đang sử dụng các giải pháp phức tạp được xây dựng với các ngônngữ dựa-trên-COM như Microsoft Visual Basic 6 và Microsoft Visual C++ 6. May mắnlà Microsoft không có ý để những doanh nghiệp đó bỏ đi nền tảng mã lệnh mà họ đã xâydựng khi chuyển sang nền .NET. Thay vào đó, .NET Framework được trang bị với cáctính năng interoperability (khả năng liên tác), cho phép bạn sử dụng lại mã lệnh cũ(legacy code) trong các ứng dụng .NET Framework và truy xuất các assembly .NET nhưthể chúng là các thành phần COM. Chương này sẽ thảo luận các vấn đề sau: Cách gọi các hàm thuộc DLL không-được-quản-lý (mục 15.1 đến 15.5). Cách sử dụng thành phần COM trong ứng dụng .NET Framework (mục 15.6 đến 15.8). Cách sử dụng điều kiểm ActiveX trong ứng dụng .NET Framework (mục 15.9). Cách tạo một thành phần .NET sao cho một COM-client có thể sử dụng nó (mục 15.10). 1.1 Gọi một hàm trong một DLL không-được-quản-lý Bạn cần gọi một hàm C trong một DLL. Đây có thể là một hàm của Win32 API hoặc do bạn viết. Khai báo một phương thức trong mã C# mà bạn sẽ sử dụng để truy xuất hàm không-được-quản-lý. Khai báo phương thức này là static và extern, áp dụng đặc tính System.Runtime.InteropServices.DllImportAttribute để chỉ định file DLL và tên của hàm cần dùng.Để sử dụng một hàm C từ một thư viện ngoài, bạn chỉ cần khai báo nó một cách thíchhợp. CRL sẽ tự động đảm trách phần việc còn lại, bao gồm việc tải DLL vào bộ nhớ khihàm được gọi và chuyển các thông số từ kiểu dữ liệu .NET thành kiểu dữ liệu C.Dịch vụ .NET hỗ trợ việc thực thi xuyên-nền này có tên là PInvoke (Platform Invoke), vàquá trình này thường là trong suốt đối với người sử dụng. Thỉnh thoảng, bạn sẽ cần thựchiện thêm một số việc, chẳng hạn cần hỗ trợ cấu trúc trong-bộ-nhớ (in-memorystructure), callback, hay chuỗi có thể thay đổi (mutable string).PInvoke thường được sử dụng để truy xuất các hàm Win32 API, đặc biệt là các tính năngkhông có trong các lớp được-quản-lý thuộc .NET Framework. Các ví dụ được trình bàytrong chương này sẽ sử dụng PInvoke theo cách này. Có ba thư viện chính trong Win32API: • kernel32.dll⎯gồm các hàm đặc-trưng-hệ-điều-hành như nạp tiến trình, chuyển ngữ cảnh, nhập/xuất file và bộ nhớ. • user32.dll⎯gồm các hàm dùng để thao tác cửa sổ, trình đơn, hộp thoại, biểu tượng,… • gdi32.dll⎯gồm các hàm đồ họa dùng để để vẽ trực tiếp lên cửa sổ, trình đơn, bề mặt điều kiểm, cũng như để in ấn.Ví dụ, xét các hàm Win32 API dùng để đọc và ghi các file INI, chẳng hạnGetPrivateProfileString và WritePrivateProfileString trong kernell32.dll. .NETFramework không có lớp nào bọc lấy chức năng này. Tuy nhiên, có thể nhập các hàmnày bằng đặc tính DllImportAttribute như sau:[DllImport(kernel32.DLL, EntryPoint=WritePrivateProfileString)]private static extern bool WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);Các đối số trong phương thức WritePrivateProfileString phải tương thích với hàm trongDLL, nếu không sẽ có lỗi khi gọi nó. Vì phương thức WritePrivateProfileString đượckhai báo để tham chiếu đến một hàm trong DLL nên bạn không được viết mã cho nó.Phần EntryPoint trong đặc tính DllImportAttribute trong ví dụ này là tùy chọn, vì tênphương thức được khai báo đã trùng với tên của hàm trong thư viện ngoài.Trong ví dụ sau, lớp IniFileWrapper khai báo các phương thức riêng tham chiếu tới cáchàm Win32 API, sau đó gọi chúng từ các phương thức công khai khác dựa trên file đượcchỉ định:using System;using System.Text;using System.Runtime.InteropServices;using System.Windows.Forms;public class IniFileWrapper { private string filename; public string Filename { get {return filename;} }public IniFileWrapper(string filename) { this.filename = filename;}[DllImport(kernel32.dll, EntryPoint=GetPrivateProfileString)]private static extern int GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);[DllImport(kernel32.dll, EntryPoint=WritePrivateProfileString)]private static extern bool WritePrivateProfileString( string lpAppName, string lpKeyName, string lpString, string lpFileName);// Bốn hàm sau không được sử dụng trong ví dụ này,// nhưng được khai báo cho đầy đủ.[DllImport(kernel32.dll, EntryPoint=WritePriva ...
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 đầuGợi ý tài liệu liên quan:
-
52 trang 413 1 0
-
Top 10 mẹo 'đơn giản nhưng hữu ích' trong nhiếp ảnh
11 trang 293 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 287 0 0 -
74 trang 277 0 0
-
96 trang 277 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 265 1 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 262 0 0 -
Giáo trình Lập trình hướng đối tượng: Phần 2
154 trang 258 0 0 -
EBay - Internet và câu chuyện thần kỳ: Phần 1
143 trang 253 0 0 -
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 247 0 0