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

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ợ

1 Like

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

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

1 Like

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

1 Like

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

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

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

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ì đó @_@

2 Likes

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

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

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

2 Likes

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:

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í):

2 Likes

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. :smile:

1 Like

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++ :smile:

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

1 Like

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;
1 Like

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

1 Like

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

Đâ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);
         }
    }
}

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

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 :wink:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?