01/10/2018, 10:33

Kết hợp 2 ngôn ngữ C# (gui) & C++ (performance) trong 1 project

Chào các bạn
mình thấy có những project sử dụng nhiều ngôn ngữ khác nhau. Mình đang muốn làm 1 project dùng c# và c++, mình thì theo c++, c# chỉ biết căn bản, và winform cũng căn bản. c++ thì m lại chưa học về gui nhiều lắm, chủ yếu mình làm trên console với gui cơ bản, kiểu command line, mà project mình làm có gui, mà c++ làm gui thì theo mình biết có qt, visual studio cũng hỗ trợ kéo thả gui cho c++. Nhưng mình muốn làm gui trên c# luôn, và phần xử lý thì minh dùng c++ thì làm như thế nào nhỉ?
xincamon

Dark.Hades viết 12:39 ngày 01/10/2018

Nếu là C# và C++ thì bạn nên chọn 1 thứ thôi,
C++ thì có rất rất nhiều thư viện hỗ trợ GUI, kéo thả có Qt, MFC,…
GUI chỉ code thì wxWidget, Nana(viết như HTML), …

C# thì xài độc quyền windows hỗ trợ

HelloWorld viết 12:45 ngày 01/10/2018

c++ làm giao diện nhọc lắm

Dark.Hades viết 12:48 ngày 01/10/2018

Qt, MFC có gì đâu mà mệt bạn?

Hung viết 12:50 ngày 01/10/2018

Xem thêm Apache Thrift, cho phép 1 function của ngôn ngữ này gọi 1 function của 1 ngôn ngữ khác, nhưng không biết có hỗ trợ C# ko?
Mình hay dùng nó để kết nối Java, Python, C++ trong 1 project, thay vì dùng các tool đặc thù của từng ngôn ngữ.

Hung viết 12:48 ngày 01/10/2018

Qt tham khảo ở đâu vậy bạn?

HelloWorld viết 12:38 ngày 01/10/2018

qt mình có nghe, lên trang chủ có đủ tài liệu cả , nhưng ở việt nam thấy còn ít người dùng, ít công ty tuyển, nên ngại học

HelloWorld viết 12:34 ngày 01/10/2018

nghe có vẻ hay, mình cũng theo 3 ngôn ngữ chính là java, c/c++ và python, bạn có thể cho mình xin ít tài liệu về vấn đề trên không

*grab popcorn* viết 12:50 ngày 01/10/2018

Nhớ không nhầm thì từ C++ build ra DLL rồi import qua C# xài được.
Hình như là dùng PInvoke gì gì đó @_@

HelloWorld viết 12:44 ngày 01/10/2018

cần lắm thông tin chi tiết

Tao Không Ngu. viết 12:45 ngày 01/10/2018

Hi Nấm Lùn
GG trước khi hỏi.

Watashi no Blog – 3 Jun 13

Use C++ codes in a C# project — solution of wrapping native C++ with a managed...

In the previous blog of unmanaged dll (here), I created DLL from unmanaged C++ codes and used dllimport/dllexport to import/export unmanaged C++ functions for uses in C#. If you want to use just a …

http://www.dorodnic.com/blog/2014/12/10/calling-cpp-by-example/

Dark.Hades viết 12:50 ngày 01/10/2018

Qt hiện tại có 2 bản, bản free-source thì hiện tại nó theo license kiểu dở dở ương ương, thành ra những người làm phần mềm để bán cũng ngại dùng:

qt.io

Qt | Cross-platform software development for embedded & desktop

Qt is the faster, smarter way to create innovative devices, modern UIs & applications for multiple screens. Cross-platform software development at its best.

Source code public trên github (không được sửa mã nguồn ngay cả khi gặp bug nếu là dùng bản miễn phí):

GitHub

Qt

*** ATTENTION!!! THIS MIRROR IS STALE!!! *** Official mirror of the qt-project.org qt/ git repositories

Văn Dương viết 12:40 ngày 01/10/2018

Cứ làm giao diện như Office, Photoshop, custom GUI đi rồi sẽ thấy nó nhọc.
Chứ kéo cái nút vào ấn được là được thì cũng không nhọc lắm.

Văn Dương viết 12:37 ngày 01/10/2018

Tìm hiểu PInvoke.
Sẽ có GUI đẹp của những thứ loanh quanh C# và hiệu năng thần thánh của C++

Đã từng chơi C# + C: hiệu năng còn đập chết C++

明玉 viết 12:41 ngày 01/10/2018

Kết hợp được, nhưng không nằm chung project được, phải để 2 project riêng biệt.

  • C# (Project chính) gọi C++ (DLL Project) thông qua P/Invoke (vô cùng cực khổ);
  • C# (Project chính) gọi C++/CLI (DLL Project) trực tiếp;
  • C++/CLI (Project chính) gọi C# (DLL Project) trực tiếp;
Văn Dương viết 12:41 ngày 01/10/2018

Thêm 1 cái InteropService. 2 dòng define là xài. Nhưng cũng tuỳ cái.

明玉 viết 12:41 ngày 01/10/2018

Thêm 1 cái InteropService. 2 dòng define là xài. Nhưng cũng tuỳ cái.

Bạn có ví dụ không, cho xin link?

Văn Dương viết 12:35 ngày 01/10/2018

Đây là những dòng lệnh để gọi 1 hàm khởi tạo camera trong opencv ( viết bằng C/C++ đã build ra *.dll)

using System.Runtime.InteropService;

namespace PInvokeDemo{
    public class PInvoke{
         // define
         [DllImport("opencv_highgui2410.dll")
         public static extern IntPtr cvCreateCameraCapture(int index);

         // use
         public void Test(){ 
              IntPtr mycamera = cvCreateCameraCapture(0);
         }
    }
}
明玉 viết 12:43 ngày 01/10/2018

Ồ, cảm ơn, mình tưởng có cách khác, hóa ra cũng là P/Invoke

Văn Dương viết 12:40 ngày 01/10/2018

Thì đã bảo PInvoke còn gì.
C# và C++ chỉ gần giống nhau phía ngôn ngữ (cú pháp).
Phía sau rất khác nhau viết chung làm sao mà compile được

Dark.Hades viết 12:45 ngày 01/10/2018

C# build trên linux/MacOS đọc được C++.dll không bác, hay lại phải vào code đổi tên thành .so, .a, .dylib?

Bài liên quan
0