Eu li muitos comentários sobre programação GUI, tanto em C # quanto em C ++. E notei que o framework .NET da Microsoft é poderoso para a programação da GUI. Então, é possível usar o framework C ++ e .NET?
Eu acho que será uma ótima combinação, pois o C ++ é uma linguagem poderosa, e o .NET framework é o preferido para a programação da GUI no Windows, como eu li. É possível escrever a GUI em C # e a funcionalidade em C ++?
Respostas:
Sim, era conhecido anteriormente como C ++ gerenciado e agora C ++ / CLI . Você tem acesso à totalidade do .NET Framework (GUI: WinForms, GDI +, etc.) como faria nos outros três idiomas gerenciados em pacote configurável, C #, F # e VB.NET.
fonte
Não se esqueça da opção mais flexível e simples, uma típica para o mundo Unix, mas, por algum motivo, não é comum no Windows: dividir a GUI e a lógica em diferentes processos, comunicando-se através de qualquer forma razoável de RPC (por exemplo, mesmo um pipe) trabalhos). De preferência com um protocolo de texto simples, legível por humanos.
Dessa forma, você pode implementar sua GUI (ou várias GUIs) com as tecnologias que você preferir e criar componentes lógicos de acordo com a necessidade - C ++, scripts, qualquer outra coisa.
Não conheço nenhuma vantagem razoável de uma abordagem de design monolítico do mundo Windows.
fonte
Eu fiz isso uma vez há alguns anos atrás, nos dias do C ++ gerenciado. Tínhamos alguma lógica de negócios em uma DLL com uma assinatura que queríamos incorporar em uma GUI no estilo do assistente, escrita em C #. Para fazer isso, criei um assembly C ++ gerenciado para ficar entre o aplicativo da GUI gerenciada e a DLL não gerenciada e usei System :: Runtime :: InteropServices :: Marshal nesse assembly para converter valores de tipos gerenciados (System :: Int32) em não gerenciados tipos (int) e vice-versa.
Embora o C ++ gerenciado pareça estar obsoleto, o mesmo princípio pode se aplicar ao C ++ / CLI.
fonte
Na verdade não. Existe uma linguagem híbrida C ++ / CLI, mas só é boa para interoperação (política oficial da Microsoft). Devido à maneira como a estrutura .NET é projetada, há muitas semânticas de linguagem que realmente não se encaixam na execução no CLR, e o C ++ exibe muitas delas.
fonte
O ângulo C ++ / CLI foi coberto por muitas respostas até agora, mas outra maneira de fazer isso é usar o PInvoke. Isso permite que programas em C # chame funções contidas em DLLs que foram escritas em C ++. A vantagem do PInvoke é que sua dll é totalmente independente do fato de ser chamada de .Net. Isso significa que você pode chamar dlls para as quais você não tem código-fonte e, mesmo que você tenha o código-fonte, não precisará recompilar usando a opção / clr. Isso significa que você pode usar esta dll com outros programas C ++, bem como programas em C #. Existem algumas fantásticas bibliotecas C / C ++ por aí: o PInvoke permite que você tire proveito delas. Às vezes, as bibliotecas Win32 fornecem funções que simplesmente não estão disponíveis no .Net: PInvoke permite que você as use.
Uma das partes mais complicadas do uso do PInvoke é saber converter a assinatura não gerenciada em uma assinatura gerenciada. Mas há uma folha de dicas para ajudar com isso.
fonte
Você também pode trabalhar com um endro C # via COM (Component Object Model). Para mim, COM foi melhor do que usar o C ++ gerenciado, já que o Visual Studio 2010 não tem intellisense para o C ++ gerenciado. No meu caso, já temos um aplicativo C ++ grande, mas queríamos tentar mudar o MFC para o WinForms ou o WPF.
fonte