Cada equipe em seu trabalho se depara com a necessidade de introduzir uma nova tecnologia ou linguagem de programação em um projeto. Às vezes, essa implementação é bem-sucedida e às vezes não. Neste artigo, compartilhamos nossas experiências com C ++ / CLI.
Previsão de tempo ensolarado
Tarefa: desenvolver um pacote de software para modelagem de diversos processos que ocorrem em instalações nos sistemas de coleta, preparação e transporte de hidrocarbonetos. Os objetos de modelagem podem ser poços (tanto de produção quanto de injeção), dutos, instalações de tratamento de óleo, gás e água. Em média, cada campo é caracterizado por mais de 100 instalações. Além disso, alguns objetos têm uma dimensão em profundidade ou comprimento - vários quilômetros. O tempo aceitável para calcular um modelo de um campo é da ordem de vários minutos. Para simplificar, você precisa imaginar o seguinte objeto:
Na forma de tal modelo - e calcular suas características.
Desenvolvimentos: métodos existentes, um projeto existente com funcionalidade que cobre parcialmente os objetivos do projeto.
: .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, .
,