Chaque équipe dans son travail est confrontée à la nécessité d'introduire une nouvelle technologie ou un nouveau langage de programmation dans un projet. Parfois, cette implémentation réussit et parfois non. Dans cet article, nous partageons nos expériences avec C ++ / CLI.
Temps ensoleillé prévu
Tâche: développer un progiciel de modélisation de divers processus intervenant dans les installations dans les systèmes de collecte, de préparation et de transport des hydrocarbures. Les objets de la modélisation peuvent être des puits (de production et d'injection), des pipelines, des installations de traitement de pétrole, de gaz et d'eau. En moyenne, chaque domaine est caractérisé par plus de 100 installations. De plus, certains objets ont une dimension soit en profondeur, soit en longueur - plusieurs kilomètres. Le temps acceptable pour calculer un modèle d'un champ est de l'ordre de plusieurs minutes. Pour le dire tout simplement, vous devez imaginer l'objet suivant:
Sous la forme d'un tel modèle - et calculez ses caractéristiques.
Développements: méthodes existantes, un projet existant avec des fonctionnalités qui couvrent partiellement les objectifs du projet.
: .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, .
,