.NET đã ra đời cũng được 5 năm rồi và người ta cũng cảm thấy nó có rất nhiều lợi ích bởi sự tiện dụng, và phát triển ứng dụng nhanh.
Nhưng một câu hỏi là nếu chúng ta đang lập trình ở lớp dưới (WIN32 Console, Win32 Application, MFC) thì có thể sử dụng được các object của .NET hay không??
Dĩ nhiên là được và hôm nay ZC sẽ chia sẻ 1 thủ thuật nhỏ để làm được điều này. (Lưu ý: bản visual studio express không hỗ trợ).
Bây giờ ZC sẽ tạo 1 project console 32
Sau đó ta sẽ làm 1 công việc để project này hỗ trợ Common Language Runtime.
Và biên dịch thử chương trình thì bạn để ý sau khi kết thúc thì output của nó sẽ có thêm dòng sau:
Mã:
The thread 'Win32 Thread' (0xf04) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x5d4) has exited with code 0 (0x0).
The program '[2304] MixDotNET.exe: Managed' has exited with code 0 (0x0).
The program '[2304] MixDotNET.exe: Native' has exited with code 0 (0x0).
Điều này có nghĩa rằng Common Language Runtime đã quản lý chương trình. Tuy nhiên nó chỉ quản lý những đối tượng của .NET.
Bây giờ chúng ta sẽ code:
Mã:
#pragma managed // Cac thu vien su dung#using <System.Windows.Forms.dll>#using <System.Data.dll>#using <System.Xml.dll>//...//... ...// Và gọi hàm// Ví dụ:...System::Windows::Forms::MessageBox::Show("Runtime MessageBox","Thông báo");//
#pragma managed là 1 chỉ thị của Vistual Studio nó cho phép chúng ta sử dụng ngôn ngữ Managed C++ Trong project.
Nếu tới đoạn code nào ko cần thiết dùng .NET bạn có thể tắt nó đi #pragma unmanaged
Sau đó là các thư viện .NET sẽ sử dụng #using ( khai báo này tương đương với references ở C# )
Mình sẽ code 1 chương trình nhỏ sử dụng ArrayList và Managed Object:
Mã:
#include "stdafx.h" #pragma managed#using <System.Windows.Forms.dll> using namespace System;using namespace System::Collections; // mcHocSinh// Doi tuong hoc sinh (managed object -> ref class)ref class mcHocSinh{protected: String ^m_hoten; String ^m_quequan;public: // Property _hoten property String^ _hoten { String^ get() { return m_hoten; } void set( String ^s ) { m_hoten = s; } } // Property _quequan property String^ _quequan { String^ get() { return m_quequan; } void set( String ^s ) { m_quequan = s; } } // Phuong thuc nhap void nhap() { Console::Write("Nhap ho ten: "); m_hoten = Console::ReadLine(); Console::Write("Nhap que quan: "); m_quequan = Console::ReadLine(); } }; int _tmain(int argc, _TCHAR* argv[]){ // Khoi tao mang ArrayList ArrayList ^list = gcnew ArrayList(); int i,n; printf ("Nhap so luong hoc sinh: "); scanf("%d", &n); // Nhap hoc sinh for (i = 0; i < n; i++) { // Khoi tao hoc sinh mcHocSinh ^hc = gcnew mcHocSinh(); hc->nhap(); // Dua vao array list list->Add( hc ); } // Xuat danh sach hoc sinh for each ( mcHocSinh ^hs in list ) { printf( "%s _ %s
", hs->_hoten, hs->_quequan ); } return 0;}
Ở MC++ thì chúng ta sử dụng:
- pointer^ thay cho* (vì đây là con trỏ chỉ vào managed object)
- gcnew thay cho new để cấp phát Managed object (ko cần delete)
Đoạn code trên sử dụng Collections, Tương tự thì ta vẫn có thể sử dụng ADO.NET ở MFC hay cả Win32APP. Nhưng để lập trình tốt mixing code này thì đòi hỏi bạn phải học thêm 1 ngôn ngữ nữa là C++.NET hay còn gọi là MC++ ( và còn 1 cái tên nữa là C++/CLI)
Chúc các bạn vui!
Vệ sinh cá nhân là một phần quan yếu của sức khỏe nam giới. Dùng dung dịch vệ sinh mỗi ngày mang lại nhiều ích, giúp loại bỏ vi khuẩn và vi sinh vật gây hại, giúp khu vực cơ quan sinh dục luôn sạch...
Gel vệ sinh cu, bạn trai có nên...