作業中の各チームは、プロジェクトに新しいテクノロジーまたはプログラミング言語を導入する必要性に直面しています。この実装が成功する場合と失敗する場合があります。この記事では、C ++ / CLIでの経験を共有します。
晴天が予想されます
タスク:炭化水素の収集、準備、輸送のシステムの施設で発生するさまざまなプロセスをモデル化するためのソフトウェアパッケージを開発する。モデリングの対象は、井戸(生産と注入の両方)、パイプライン、石油、ガス、水処理施設です。平均して、各フィールドは100以上の施設によって特徴付けられます。さらに、一部のオブジェクトには、深さまたは長さのいずれかの寸法(数キロメートル)があります。1つのフィールドのモデルを計算するための許容可能な時間は、数分程度です。簡単に言うと、次のオブジェクトを想像する必要があります。
そのようなモデルの形で-そしてその特性を計算します。
開発:既存の方法、プロジェクトの目的を部分的にカバーする機能を備えた既存のプロジェクト。
: .NET/WPF, C++, , .
, , , , , , . , : C++, , :
;
.
, , .NET/WPF, .NET/C# c P/Invoke. P/Invoke ( ) – , , . . . :
C# , , . . , C# C++.
(, , , P/Invoke), : " ?".
.
P/Invoke, C++/CLI.
C++/CLI (C++ modified for Common Language Infrastructure) Microsoft Managed Extensions for C++. C++/CLI .NET, C++.
CLI Common Language Infrastructure – ( ), Microsoft ISO Ecma, , . . . C++/CLI :
C++/CLI, , ++. C++/CLI P/Invoke, , .
P/Invoke . C++/CLI :
public ref class DeviceBaseClr : public IDisposable, public Figures::Models::IItemBase
{
#pragma region
protected:
/// <summary>
/// C++ unmanaged
/// </summary>
DeviceBase* obj_;
#pragma endregion
#pragma region IItemBase
public:
virtual IState^ GetState(DateTime date);
virtual IState^ SetState(DateTime date, IState^ state);
#pragma endregion
#pragma region
public:
DeviceBaseClr(IStateFactory^ stateFactory);
virtual ~DeviceBaseClr();
protected:
!DeviceBaseClr();
#pragma endregion
};
} // Simtep::Diagrams
#endif // _DEVICEBASECLR_H_
, MVVM, :
, , .
-, C# (, , – C++/CLI ).
-, - , , ++.
:
:
C++ ( ), , CLI.
LINQ CLI, , , -, – .
«» .
, , , , .NET.
, , , CLI, - ?
, . .
, .
, . C++/CLI , .
:
C++/CLI – - . . . C++, , , C++ . , , , .
C# .
, , C++/CLI, . , , , , C# C++/CLI.
, , , , – . , . , :
, . :
CLI. . , ( ) , .
, . . .
.NET, .
managed unmanaged ( ).
, , ( CLI) . . , 70 .
:
;
;
;
;
.
:
CLI , , C++. ( ) – ++, .
RabbitMQ ZeroMQ, , , , , , – . , .
3- , - , :
, 3*. , , C#. , , , , .
3 C++ .
, , :
C++/CLI – , . , , – – , . . . , , , , . . !
- C++/CLI, .
,