2012-01-03 46 views
17

Possible Duplicate:
What is the difference between Managed C++ and C++/CLI?
What is CLI/C++ exactly? How does it differ to 'normal' c++?Sự khác biệt chính giữa C++ so với C++ .NET là gì?

Tôi nghi ngờ phân biệt giữa C++ và C++. NET.

Có đúng C++ là mã không được quản lý và C++. NET được quản lý mã?

tôi cần phải lập trình cho một dự án trong C++. Để xây dựng GUI tốt hơn, tôi muốn sử dụng C++. NET.

Tôi cũng có một thư viện C++ đơn giản khác (tệp DLL C++ không được quản lý), có thể sử dụng nó làm thư viện DLL thông thường trong dự án C++ .NET không?

Trả lời

26

Is that right C++ is unmanaged code and C++.NET is managed code.

Không có điều nào như "C++. NET". Có C++/CLI, về cơ bản là C++ với các phần mở rộng của Microsoft cho phép bạn viết mã nhắm vào khung công tác .NET. Mã C++/CLI biên dịch sang mã bytecode CLR và chạy trên một máy ảo giống như C#. Tôi sẽ giả sử bạn đang thực sự nói về C + +/CLI.

đối với rằng Với, người ta có thể nói tiêu chuẩn C++ là không được quản lý và C++/CLI được quản lý, nhưng đó là thuật ngữ Microsoft rất nhiều. Bạn sẽ không bao giờ thấy thuật ngữ "không được quản lý" được sử dụng theo cách này khi nói về tiêu chuẩn C++ trừ khi so sánh với C++/CLI.

Cả hai tiêu chuẩn C++ và C++/CLI có thể được biên soạn bởi các C trực quan ++ biên dịch tương tự. Trước đây là mặc định trên trình biên dịch VC++, trong khi một trình biên dịch trình biên dịch là cần thiết để làm cho nó biên dịch trong chế độ thứ hai.

I need to program for a project in C++. For better building the GUI, I would prefer to use C++.NET.

Bạn có thể tạo chương trình GUI bằng C++ cũng như C++/CLI. Nó chỉ là khó khăn hơn bởi vì không có một thư viện chuẩn trong tiêu chuẩn C++ để xây dựng giao diện đồ họa như .NET framework có, nhưng có rất nhiều các dự án ngoài kia như QtwxWidgets mà cung cấp một khuôn khổ C++ GUI.

I also have another plain C++ library (unmanaged C++ dll), will it be possible to use it as a normal dll library in the C++.NET project?

Có. Nó có thể mất một số công việc phụ để đối phó với các loại dữ liệu C++ tiêu chuẩn khác nhau và các kiểu dữ liệu .NET, nhưng bạn chắc chắn có thể làm cho nó hoạt động.

+0

Cảm ơn cho câu trả lời nhanh chóng của bạn. Nếu vậy, tôi nên sử dụng C + +/CLI trong Visual Studio để xây dựng GUI thay vì sử dụng QT hoặc wxWidgets? vì sử dụng QT hoặc wxWidgets, tôi giới thiệu một sự phụ thuộc khác của ứng dụng của tôi. Tôi cho rằng nếu tôi chỉ sử dụng C++/CLI được quản lý, tôi chỉ cần có khung .net. Ưu điểm và nhược điểm của việc sử dụng C++/CLI, QT và wxWidgets là gì? bạn có thể vui lòng giúp tôi làm rõ về chúng không? Cảm ơn trước. – olidev

+0

@devn: Khuôn khổ .NET cũng là một phụ thuộc thậm chí còn lớn hơn cả Qt hoặc wxWidgets, vì vậy bạn sẽ cần một sự phụ thuộc trong mọi trường hợp. Lưu ý rằng Qt và wxWidgets không yêu cầu một .NET framework để làm việc. –

+1

sử dụng wxWidgest hoặc QT có thể làm cho ứng dụng của bạn di động trên nhiều nền tảng. .NET đảm bảo rằng bạn đang cố định trên VisualStudio/Windows. Nếu bạn đã quen thuộc với .NET Framework, nó làm giảm nỗ lực so với làm việc với một khung công tác hoàn toàn mới. Mặt khác, việc sử dụng các thư viện C++ thuần túy không giới thiệu một lớp bổ sung (các lớp ref so với các lớp gốc) mà bạn phải làm chủ. Tóm lại - nó phụ thuộc vào kiến ​​thức và trường hợp sử dụng của bạn. –

2
  • Có, C++ là mã không được quản lý và C++. NET được quản lý.
  • Có, bạn có thể sử dụng DLL C++ không được quản lý của bạn trong dự án C++ .NET. Nhưng bạn phải viết một wrapper cho điều đó. Điều đó có nghĩa là bạn phải định nghĩa các phương thức không được quản lý mà bạn muốn truy cập trong dự án C++ .NET của bạn.

Ví dụ:

using System.Runtime.InteropServices; 

[DllImport("YourDLLName")] 
public static extern void UnmanagedMethodName(string parameter1); 
+1

Điều này không đúng, bạn có thể sử dụng mã C++ không được quản lý từ các dự án C++/CLI mà không gặp bất kỳ vấn đề nào và không cần thêm công việc. – Timbo

+0

Không biết điều đó. Làm sao? –

+0

Chỉ cần #include tệp tiêu đề và liên kết tới .lib? Đó là C++ sau khi tất cả. – Timbo

3

Vâng ... C++ .NET là loại một cái tên nhầm lẫn. Bạn có thể lập trình bằng C++ sử dụng studio trực quan .NET. Vâng đó là những gì nó được gọi là thời gian trước đây. Bây giờ một ngày folks chỉ cần gọi nó Visual Studio, với dấu chấm NET moniker. Vâng, ít nhất là màn hình giật gân không có một lớn ol. NET trong logo nữa.

Nó được loại hiểu rằng việc sử dụng Visual Studio (VS), bạn có thể lập trình bằng các ngôn ngữ được quản lý và không được quản lý (Rất nhiều sự lựa chọn có btw).

Nếu bạn muốn chương trình trong C++ sử dụng Visual Studio bạn có hai lựa chọn:

  1. Switch hoặc có nguồn gốc C/C++. Đây là cũ (hoặc mới tôi đoán quá) C + + mà bạn đã luôn luôn được biết đến, và bạn chương trình với bộ nhớ không được quản lý.

  2. Managed C++. Họ gọi C++/CLI này. Đó là đọc C + + trên CLI, không phải C++ chia cho CLI! Đây là C++ có từ khóa bổ sung và một vài yếu tố cú pháp bổ sung hơn so với C++ gốc. Điều này cho phép bạn sử dụng Thư viện lớp .NET Foundation và thực hiện những điều thú vị khác trong khung công tác .NET . Điều này tất nhiên sử dụng bộ thu gom rác cho bộ nhớ cho các loại được quản lý.

Cá nhân ngôn ngữ yêu thích của tôi là C#, nhưng nếu bạn cần interop giữa C++ và .NET hơn là sử dụng Managed C++. Nó rất dễ làm, và tôi nghĩ là dễ hơn những thứ P/Invoke khác.

Nếu bạn đang đi đến một số dự án, tôi sẽ đề nghị bạn làm giao diện người dùng của bạn trong C# và tận dụng tất cả những gì nó cung cấp. Sau đó, hãy tham khảo một thư viện được quản lý chế độ hỗn hợp có chứa mã C++ của bạn. Tôi nghĩ rằng sẽ dễ dàng hơn cho bạn.

Câu trả lời cho câu hỏi cuối cùng của bạn là có, bạn chắc chắn có thể sử dụng câu hỏi đó trong ứng dụng của mình.

Sau đây là cách các phụ thuộc sẽ làm việc:

[C# ứng dụng/GUI] phụ thuộc vào [++ lắp ráp C Managed] phụ thuộc vào [Native C++ Lib]

+0

Chỉ cần một phụ lục - Quản lý C++ hiện được coi là không được hỗ trợ cho C++/CLI (nguồn: http://stackoverflow.com/tags/managed-c%2B%2B/info). – StockB

9

Managed C++ là một hiện phản Microsoft bộ độ lệch từ C++, bao gồm các phần mở rộng ngữ pháp và cú pháp, từ khoá và thuộc tính, để đưa cú pháp và ngôn ngữ C++ vào .NET Framework. Các phần mở rộng này cho phép mã C++ được nhắm mục tiêu đến Common Language Runtime (CLR) dưới dạng mã được quản lý cũng như tiếp tục tương thích với mã gốc. Quản lý C++ không phải là một ngôn ngữ lập trình hoàn chỉnh độc lập hoặc chính thức.

Managed C++

#using <mscorlib.dll> 
using namespace System; 

int main() { 
    Console::WriteLine("Hello, world!"); 
    return 0; 
} 

Vanilla C++

#include <iostream> 
using namespace std; 

int main() 
{ 
    cout << "Hello, world!"; 
return 0; 
} 
+2

Hoàn toàn vô dụng "thông tin". Câu hỏi rõ ràng là hỏi về C++/CLI không bị phản đối. – IInspectable

Các vấn đề liên quan