Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 8 của 8
  1. #1

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Đây là best feature của C++/CLI chứ ko phải chỉ là 1 thủ thuật đâu, ebook C++/CLI là nó toàn nói 3 cái này mà.
    Cứ tạo 1 CLR Project rồi vào tha hồ mix code, mix library, thích thì ^, thích thì * (ko cần bật #pragma managed) [IMG]images/smilies/biggrin.png[/IMG]

    MC++ (Managed C++) khác C++/CLI, MC++ hình như là tiền thân của C++/CLI.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Lugia
    Đây là best feature của C++/CLI chứ ko phải chỉ là 1 thủ thuật đâu, ebook C++/CLI là nó toàn nói 3 cái này mà.
    Cứ tạo 1 CLR Project rồi vào tha hồ mix code, mix library, thích thì ^, thích thì * (ko cần bật #pragma managed) [IMG]images/smilies/biggrin.png[/IMG]

    MC++ (Managed C++) khác C++/CLI, MC++ hình như là tiền thân của C++/CLI.
    Mình không hiểu thuật ngữ mix code, mix library là gì,bạn có thể giải thích không

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Cũng chẳng phải thuật ngữ gì, chế đại ấy mà [IMG]images/smilies/biggrin.png[/IMG]
    Nghĩa là vừa có thể xài syntax mới, vừa có thể xài theo kiểu C/C++ truyền thống. Tương tự với library, vừa xài dc library của .NET, vừa xài dc mấy cái library truyền thống của C/C++, như code minh họa của ZCoder đó.

  5. #5

    Mix code giữa .NET và WINAPI

    .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!

  6. #6
    Trích dẫn Gửi bởi namvodang
    ngày xưa tớ dùng wrap mấy cái lib cho C# xuốt.
    Cách mà cậu dùng là từ trên gọi xuống. Có nghĩa là từ .NET cậu sử dụng API.

    Còn cái mà tớ đang nói đây là ngược lại, có nghĩa là từ API ta sử dụng các lớp trên của .NET.

    Nghe thì hơi kỳ nhưng 2 cái hoàn toàn khác nhau vì wrap là cậu dùng cho các ngôn ngữ ở .NET. Còn hướng dẫn của tớ là dùng cho các project MFC, WIN32 nếu cảm thấy cần thiết sử dụng các object ở .NET.

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Tui thấy bản chất giống nhau cả thôi, chỉ có điều cách dùng khác nhau.
    Chương trình kiểu này nên coi là .Net đi, vì compile sẽ ra bytecode, khi chạy cần .Net framework mà. [IMG]images/smilies/biggrin.png[/IMG]

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Giả sử mình đang có sẵn class viết bằng C++ (và đóng gói thành DLL) (hiện giờ chỉ gồm file H, Lib và DLL)
    làm thế nào để wrap cho 1 ứng dụng C# có thể dùng class đó được, thanks

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •