Este artigo foi traduzido por máquina.
Windows Store
Windows Store C++ para desenvolvedores do C#: Compreendendo o domínio
Os desenvolvedores de c# tem um ambiente de desenvolvimento rico que enfatiza a produtividade por desempenho. Eu suspeito que esta afirmação pode reuniu-se com algum ceticismo de desenvolvedores c# como o desempenho é excelente e excede o que a maioria de nós precisa cumprir nossas metas. Assim, para os desenvolvedores de c#, C++ modernos não podem oferecer um retorno sobre o investimento como produtividade pode sofrer mesmo com todas as novas ofertas de melhorias o C++ novo. No entanto, a beleza do desenvolvimento de app Store do Windows é que você pode tomar uma abordagem ágil para a construção de componentes reutilizáveis que é produtivo, usando o melhor de ambas as línguas a fase em componentes C++ onde eles são mais úteis.
Este artigo destina-se para os desenvolvedores de c# que querem explorar o poder e desempenho que modern C++, C + + / CX (extensões de componente) e o Windows Runtime C++ modelo biblioteca (WRL) oferta (todos conhecido como C++ aqui por questões de brevidade). Também se destina para os desenvolvedores que, como eu, pensando em alavancar o poder da nuvem Windows Azure. Aplicações construídas com o C++ não só têm o potencial para estender a vida de bateria tablet e telefone, mas também deve resultar em menor custo devido ao melhor desempenho por watt, por transistor e por ciclo (ver "C++ e para além de 2011: Herb Sutter – porque C++? "em bit.ly/1gtKQya).
Os desenvolvedores c# problema encontram-se na tentativa de aprender que c++ é que a maioria da documentação, blogs e outros materiais disponíveis reflete as perspectivas dos experientes desenvolvedores de C++, não o desenvolvedor c# (que geralmente não querem construir um aplicativo de console simples-projeto). Para complicar ainda mais as questões, C++ está passando por um renascimento, assim grande parte do material atual poderia ser obsoleto, não aplicar ou te distrair as mais novas, mais eficientes técnicas de codificação. Para discernir o que é válido ou não, você precisa de uma compreensão básica do domínio, indicada por siglas como C++, C + + / CLI, C + + / CX, WRL, STL, ATL, WinRT e assim por diante. Sem esse entendimento, você pode acabar queimando ciclos valiosos material que não se aplica ao seu objetivo, que é, provavelmente, ramping acima para rapidamente construir aplicações C++ Windows loja de aprendizagem.
Meu interesse em C++ surgiu quando eu bater no teto de desempenho c# com um caso de uso que tinha para processar um algoritmo complexo em mais de 200.000 registros. Minha pesquisa levou-me para o webcast, "Domesticando GPU calcular com C++ AMP" (bit.ly/1dajKE6), que apresentou uma aplicação de demonstração que mudou a minha percepção do desempenho para sempre. Se eu tivesse experiência com C++ AMP, e foi capaz de criar uma prova de conceito para apresentar para a equipe, eu suspeito que eles alegremente aceitaria um componente C++ quando viram um processo 11-segundo reduzido para milissegundos. Infelizmente, a magnitude da informação C++ (e desinformação) disponível, juntamente com minha falta de conhecimento do domínio de C++, tinha me tropeçando em uma vasta biblioteca de informações, buscando a prateleira que continha os livros referentes ao desenvolvimento C++ para aplicativos Windows Store.
O propósito deste artigo não é ensinar C++, mas para apontar-lhe aquela prateleira. Isso garantirá que o seu caminho de aprendizado está limpo, livre de águas muddied, e você não distraído pela nevasca da informação que pode realmente bloquear seu progresso e lhe causar frustração desnecessária. Depois de ler este artigo, você deve estar melhor equipado para beneficiar material aplicável de C++, tais como os mais recentes artigos da MSDN Magazine, bibliotecas e blogs sobre desenvolvimento C++.
Download do código deste artigo é uma solução de Visual Studio contendo três apps baseados em plataformas de desenvolvimento diferentes: C#, C++ e JavaScript. Como você verá, dentro desta solução eu abreviar aplicações Windows loja como Wsa para meus nomes de projeto (isto não é uma abreviatura oficial). A aplicação de WsaJavaScript é baseada no tutorial do MSDN, "passo a passo: Criando uma base Windows Runtime componente usando WRL"(bit.ly/1n1gvV2). Você verá que eu simplesmente adicionei dois botões rotulados "Vinculação de dados" e "Vinculação de dados (Reused)" para esta aplicação tutorial (como mostrado em Figura 1). Observe que ambos o WsaXamlCpp (C + + / CX) e WsaXamlCs (c#) aplicações nesta solução usam as mesmas bibliotecas e produzem os mesmos resultados exatos.
Figura 1 três vistas de aplicativo (aplicações mostradas em verde, bibliotecas em roxo, casos de uso em cinza)
The translation from VPE for Csharp e C + + / CX aplicativos demonstram quão poderoso Windows Store, que é realmente o desenvolvimento de aplicativos — é perfeitamente possível reutilizar componentes entre plataformas, como o painel direito da Figura 1 mostra). Por exemplo, como revisar o código, você encontrará tanto o c# e C + + / CX demo aplicativos usam o mesmo XAML, que foi copiado e colado em respectivo modo de exibição do cada aplicação (DataBindingView). Da mesma forma, você verá que eles usam o mesmo apresentador (DataBindingPresenter), modelo de exibição (MainViewModel), camada de acesso a dados (MockDataDal) e agente de log (DebugLogger). Com o desenvolvimento de aplicativos Windows Store, você pode criar bibliotecas c# ou C++ em qualquer língua, para que possa entrar em desenvolvimento C++ no seu próprio ritmo e substitua menos eficientes algoritmos de c# código C++ AMP de alto desempenho com perda de produtividade mínima.
Produtividade brilha porque você pode reciclar todo seu código útil. Por exemplo, o agente de log para os dois aplicativos (consulte a janela de saída na parte inferior da Figura 2) é um componente c# que reside no projeto c# WsaWrcCs. Não tive que investir tempo construindo um logger de C++, que tem impacto negligenciável no desempenho e pode se concentrar em áreas mais críticas. Figura 2 também revela que há pouca diferença entre o c# e o C + + código CX na classe DataBindingPresenter; Essa classe contém a maioria do código do aplicativo como todos os outra lógica reside nos componentes compartilhados (você encontrará pouco código em ambos os projetos de aplicativo).
Figura 2 C + + / CX e código c#, usando o mesmo ver os modelo, camada de acesso a dados e Logger
Além de mostrar o poder de desenvolvimento de aplicativos Windows Store, a solução apresentada aqui fornece uma caixa de areia em que você pode iniciar o desenvolvimento de C++. Onde a maioria dos tutoriais e exemplos fornecem código para um aplicativo de console (tendo pouco valor em um ambiente de aplicativo Windows Store), esta dá solução você experimentar o código do tipo de projeto aplicáveis em que estás interessado — modern C++, WRL ou C + + / CX. Você pode ver como seu código C++ pode ser facilmente acessado pelo aplicativo c#.
Enquanto eu vou discutir os temas de domínio do C++ aplicáveis ao desenvolvimento de app Store do Windows, eles não vai ser cobertos em grande profundidade aqui. No entanto, o seguinte deve fornecer uma linha de base a partir do qual você pode continuar sua pesquisa e fornecerei alguns links para que você pode se aprofundar em detalhes, quando aplicável. O objectivo deste exercício é para ajudar a se concentrar sobre os temas chaves que você precisa entender, efetivamente, filtrando a magnitude da informação que não se aplica. Quero reconhecer a equipe de desenvolvimento do Microsoft C++, como eram instrumentais em ajudar-me a navegar através da biblioteca maciça de informação para encontrar a prateleira eu precisava para ser produtivo em minha jornada para se tornar um desenvolvedor Microsoft C++.
Tempo de execução do Windows (WinRT)
O sistema de tipos do WinRT permite que você use uma variedade de línguas para acessar as APIs do Windows (que são expostos como WinRT tipos) e escrever aplicativos e componentes usando a mesma tecnologia. O tempo de execução do Windows é baseado em um aplicativo binário Interface (ABI); um padrão para conectar componentes, bem como as APIs.
O que você vê em Figura 1 é a integração de plataformas de desenvolvimento diferentes: C#, C++ e C + + / CX transparente, sendo usado por aplicativos JavaScript, c# e C++ Windows Store. Para que isso seja possível, deve haver uma interface padrão, todas as linguagens de desenvolvimento aderirem para que possam usar o código compilado. Para conseguir isso, os WRL WinRT componente projetos e cada geram um arquivo .winmd que serve como um arquivo de cabeçalho de várias linguagens. Observe que o arquivo .winmd é essencialmente um arquivo de metadados CLI (assim ele pode ser visto com ILSpy).
Produzimos e consumimos o ABI usando C + + / CX, WRL, c# e JavaScript (ou qualquer outra linguagem que adiciona suporte para o WinRT ABI). Como um desenvolvedor c# sua inclinação pode ser escrever todo seu código usando o C + + / CX, como ele está mais próximo para o que você está acostumado a usar, mas você deve minimizar o uso do WinRT tanto quanto possível e estritamente limitá-lo à camada de ABI. Por exemplo, seu código deve alavancar o poder do C++ usando apenas C + + / CX quando necessário para atravessar a ABI. Coerente com sua concepção e finalidade, você encontrará que C + + / CX contém apenas um pequeno subconjunto de funções para seus componentes, ou seja, String sentirão a sua falta a maioria das funções a que você está acostumado e pode ser necessário, como não foi destinado a ser uma linguagem de desenvolvimento autônomo. Compreendendo a ABI e os seus condicionalismos irá ajudá-lo em seu C + + / desenvolvimento de CX. Eu recomendo rever os vídeos do canal 9 sobre o tema, tais como "Sob o cobre com C++ para Metro-estilo aplicativos" (bit.ly/1k7CWLq).
Bibliotecas
A biblioteca STL (Standard Template) é a biblioteca mais importante para os usuários do C++. Ambos os modelos e os genéricos responder à pergunta, "Como você constrói contêineres genéricos tipo seguro?" Modelos c++ e generics em c#, e embora a sintaxe é um pouco semelhante, são conceitos muito diferentes. Modelos são especializados em tempo de compilação. Os genéricos são especializados em tempo de execução. Quanto ao C + + / CLI, eles são bastante diferentes que têm diferente palavras-chave e sintaxes. Numa perspectiva de c#, se você aproximar modelos como fazes genéricos você encontrará que eles estão um pouco familiares.
Como a documentação da Biblioteca MSDN (bit.ly/1bZzkTB) indica, a STL estabelece normas uniformes para o aplicativo de iteradores para contêineres STL ou outras seqüências que você definir, por algoritmos da STL ou outras funções que você definir. Esta é uma definição comum da STL, que significa, é claro, que você precisa para entender o que são recipientes, iteradores e algoritmos. Eu não vou aprofundar esses aqui, mas eles estão bem documentados na Biblioteca MSDN.
Tenha em mente o C++ STL não é a mesma coisa que a biblioteca padrão do C++. De acordo com a documentação da Biblioteca MSDN , a biblioteca C++ padrão em Visual Studio 2013 é uma implementação conforme a partir do qual um programa C++ pode ligar-se um grande número de funções. Essas funções executar serviços essenciais tais como a entrada e saída e fornecer implementações eficientes das operações mais utilizadas (bit.ly/1eQkPlS).
O ativo Template Library (ATL) é um conjunto de classes de C++ baseado em modelo que permite que você crie um pequeno, rápido os objetos. Ele possui suporte especial para principais recursos de COM, incluindo implementações das ações duas interfaces, interfaces de enumerador COM padrão, pontos de conexão, interfaces destacável e controles ActiveX (bit.ly/1engnjy). É importante saber que apenas um pequeno subconjunto do COM e o WINAPI são suportados em um aplicativo do WinRT. O WRL é mais adequado para aplicações de WinRT.
O WRL é como um ATL simplificado para o tempo de execução do Windows. Consiste em um conjunto de cabeçalhos e modelos que podem ajudar a desenvolvem o WinRT classes usando os recursos de C++ padrão. Elimina uma quantidade maciça de código clichê que caso contrário precisaria adicionar e reduz o número de linhas necessário para aproximadamente o mesmo que C + + / CX. C + + / CX é a maneira que a maioria dos desenvolvedores são esperados para produzir e consumir WinRT componentes, a menos que você precisa para fazê-lo em uma base de código que proíbe excepções ou tem outras necessidades especiais, ou simplesmente prefere evitar extensões de linguagem proprietária, a menos que absolutamente necessário. WRL é o menor nível de desenvolvimento do C++ para fazer interface para aplicativos Windows Store. Ele faz falta algumas facilidades para a construção de componentes XAML, então você deve somente usar C + + / CX ou c# para criar componentes XAML.
C++
Modern C++ (versão 11 ou superior) é significativamente diferente das versões anteriores, antiguidade muitos livros atuais, blogs e artigos, portanto, tenha cuidado. Se algo é usando o "novo" ou "delete", é o velho C++. Não que isso seja inútil ou obsoleto e você não terá que reescrever o código existente, como C + + 11 joga bem com o código existente; Você só não vai alavancar a simplicidade e a eficiência do C++ moderno.
C + + / CX é um relativamente c# developer forma amigável de autor tipos WinRT. Esta extensão de linguagem foi criado para tornar mais fácil de produzir e consumir WinRT tipos, mas não é necessário. Na verdade, você pode usar o WRL para fazer o mesmo, mas não é tão facilmente ou diretamente. Nota que C + + / CX empresta o C + + / sintace, mas acessam um runtime diferente.
C + + / CLI geralmente não é usado para desenvolvimento desktop Windows. Normalmente, é usado somente para código gerenciado em circunstâncias extremamente estreitas. Por exemplo, algum código nativo existente executa uma tarefa bem e quer expô-lo para o uso fácil do código gerenciado, mas a interface que você deseja expor para código gerenciado não é idealmente exposta via COM ou P/Invoke. O público para C + + / CLI é muito, muito pequeno. Já observei isso aqui só por causa das semelhanças da ^ notação (chapéu) e o potencial para que possa causar confusão, como alguns exemplos de código CLI não serão compatíveis com C + + / CX.
Ambos C + + / CLI e loja Windows aplicativos escritos com C + + / CX usar a notação de chapéu. Você pode usar componentes WinRT em aplicativos de área de trabalho (não Windows Store) Windows com C + + / CX, caso em que você usar o chapéu. Você também pode usar o WinRT componentes em loja de janelas e desktop Windows aplicativos usando C++, caso em que os aplicativos não vai usar o chapéu.
Ao pesquisar na Internet, é uma boa idéia para preceder suas buscas com "modern C++" ou "C + + / CX" para garantir que você vai estar exibindo a documentação aplicável.
Uma lição de história
No passado, reutilização de software destinado a fornecer acesso aos componentes sem necessariamente outros dando acesso ao código. Isso pode ser feito fornecendo um arquivo estático vinculado biblioteca (. lib) com um arquivo de cabeçalho (. h), que outros desenvolvedores podem usar para vincular a. lib para aplicações diferentes — o cabeçalho desde a interface e a biblioteca no código-fonte compilado.
Um dos problemas inerentes dessa prática é a quantidade de memória e espaço em disco pode demorar. Por exemplo, uma biblioteca de 2MB, compilada em um conjunto de software de seis aplicativos leva 12MB de espaço em disco. Claro, a capacidade média de disco XT-compatível com PC na época era 20MB. Com o surgimento da DLL veio a capacidade de compartilhar um conjunto único de código entre vários aplicativos. Com isso, os seis aplicativos agora tirar apenas 2MB para usar a mesma biblioteca.
Os detalhes, prós e contras de bibliotecas estáticas versus DLLs estão fora do escopo deste artigo. Você encontrará referências exaustivas para ambas as bibliotecas na documentação da Biblioteca MSDN .
Bibliotecas estáticas e DLLs têm um lugar na construção de modernas bibliotecas do C++. No entanto, se você está tentando construir componentes reutilizáveis que podem ser facilmente acessados por aplicativos JavaScript, C++ e c# Windows Store, você precisa resistir a reação instintiva para selecionar a DLL do aplicativo Windows Store (para que os desenvolvedores de c# estão acostumados). Como você verá posteriormente, não é a DLL como você sabe disso. Em vez disso, você quererá selecionar o modelo de projeto para o componente WinRT (que me refiro como WRC). Isto é o que a Microsoft recomenda, e fornece uma experiência de desenvolvimento mais próxima àquele para o qual você está acostumado.
Modelos de projeto
Para os desenvolvedores de c#, adicionar uma nova biblioteca é simples — você adicionar um projeto de biblioteca de classe e usá-lo para construir suas interfaces, classes e assim por diante. Referenciar bibliotecas de classe é tão fácil, como você simplesmente adicionar referências a seu projeto de biblioteca de classe de seu aplicativo ou outras bibliotecas de classe — produtividade no seu melhor.
Infelizmente, construção de bibliotecas C++ é muito menos simples e, como desta escrita, você não vai encontrar muita documentação ou exemplos sobre como configurar Visual Studio para o desenvolvimento de componentes reutilizáveis, em particular sobre como configurar os diversos tipos de modelo de projeto disponível. A seguir irá ajudá-lo configurar Visual Studio para usar os modelos de projeto do Windows Store aplicativo C++.
Componente WinRT
A documentação da Biblioteca MSDN para "DLLs (C + + / CX)" sugere que quando você precisa criar uma DLL para uma app Store do Windows, você deve criá-lo como um componente do WinRT usando o modelo de projeto de mesmo nome (bit.ly/1iwL1Wg). Como observei, esta opção oferece a experiência mais familiar para adicionando e Referenciando bibliotecas.
Como Figura 2 mostra, existem muitas semelhanças entre o C + + / CX e c#, então os desenvolvedores de c# devem ser capazes de rapidamente rampa até C++. A coisa interessante sobre o componente WinRT é que é transparente para aplicativos c# e C++ Windows Store, dando aos desenvolvedores c# um meio para se concentrar na produtividade e desempenho como a dita situação. Assim, como indiquei anteriormente, se você deseja reutilizar um componente c# Logger existente em seu aplicativo C++ XAML Windows Store, tudo o que você precisa fazer é porto o código em um projeto c# WRC e você está feito. Você agora pode referenciá-los de aplicativos C++ e c# (como eu fiz na solução de amostra).
Tenha em mente que, porque o ABI impor algumas restrições, tais como a necessidade de classes para ser selada, você terá que olhar para o desenvolvimento de um novo ângulo, que enfatiza a "composição sobre abstração," que se presta muito bem para a construção de aplicativos compostos.
Modelo de projeto de biblioteca de classes WRL
Um modelo de projeto de biblioteca de classe WRL é um conjunto de classes definidas pelo usuário construído usando o WRL. Infelizmente, explicações e tutoriais WRL podem ser bastante assustadores. Como uma introdução a WRL e compreender o modelo de projeto de biblioteca de classe WRL, eu recomendo que você siga o tutorial "passo a passo: Criando uma base Windows Runtime componente usando WRL"(bit.ly/1n1gvV2). Você vai ficar impressionado em como, com apenas algumas linhas de código, você pode acessar seu código C++ de um aplicativo JavaScript simplesmente adicionando uma referência para a biblioteca. Este tutorial foi a base para a solução de exemplo que forneci.
O tutorial é importante para aqueles novos para WRL, porque ele também fornece um elo importante para a geração de um projeto WRL usando o modelo de biblioteca de classe WRL. Este modelo inclui as informações necessárias para invocar o compilador MIDL, que processa um arquivo IDL (ver bit.ly/1fLMurc para obter mais informações). Nos bastidores, o compilador MIDL gera os arquivos necessários (ocultos) para o projeto da Contoso WRL, que cuida de toda a sobrecarga associada WRL development—contoso_h.h, contoso_i.c e contoso_p.c. Como você vai ver o tutorial, tudo você tem que criar são os arquivos contoso.idl e contoso.cpp, que Figura 3 e Figura 4 mostrar, respectivamente. Observe que eu adicionei a funcionalidade AddStr (string, string); Não era parte do tutorial.
Figura 3 Contoso.idl
import "inspectable.idl";
import "Windows.Foundation.idl";
import "ocidl.idl";
#define COMPONENT_VERSION 1.0
namespace Contoso {
interface ICalculator;
runtimeclass Calculator;
[uuid(0be9429f-2c7a-40e8-bb0a-85bcb1749367),
version(COMPONENT_VERSION),
exclusiveto(Calculator)]
interface ICalculator : IInspectable
{
// msdn.microsoft.com/library/jj155856
// Walkthrough: Creating a Basic Windows Runtime Component Using WRL
HRESULT Add([in] int a, [in] int b, [out, retval] int* value);
HRESULT AddStr([in] HSTRING a, [in]
HSTRING b, [out, retval] int* value);
}
[version(COMPONENT_VERSION), activatable(COMPONENT_VERSION)]
runtimeclass Calculator
{
[default] interface ICalculator;
}
}
Figura 4-Contoso.cpp
#include "pch.h"
#include "Contoso_h.h"
#include <wrl.h>
#include <string>
#include <memory>
#include "Calculator.h"
using namespace std;
using namespace Microsoft::WRL;
using namespace Windows::Foundation;
namespace ABI {
namespace Contoso {
class Calculator : public RuntimeClass<ICalculator> {
InspectableClass(RuntimeClass_Contoso_Calculator, BaseTrust)
public:
// Use an external C++ Windows Store App DLL to handle strings
// note: WRL doesn't permit overloading functions
HRESULT __stdcall AddStr(_In_ HSTRING a, _In_ HSTRING b, _Out_ int* value)
{
// Convert HSTRING values into const wchar_t*
// so you can pass them into C++ DLL
const wchar_t* buffera = WindowsGetStringRawBuffer(a, nullptr);
const wchar_t* bufferb = WindowsGetStringRawBuffer(b, nullptr);
// Instantiate calculator using modern methods – reference
// msdn.microsoft.com/library/hh279669
auto calc = make_shared<WsaDllCpp::Calculator>();
// Add the string values
auto val = calc->Add(buffera, bufferb);
// Assign value
*value = val;
return S_OK;
}
// msdn.microsoft.com/library/jj155856
// Walkthrough: Creating a Basic Windows Runtime Component Using WRL
HRESULT __stdcall Add(_In_ int a, _In_ int b, _Out_ int* value) {
if (value == nullptr)
{
return E_POINTER;
}
*value = a + b;
return S_OK;
}
};
ActivatableClass(Calculator);
}
}
Como com c# classe bibliotecas, usando um componente de um aplicativo ou um projeto externo de WRL simplesmente requer que você adicionar uma referência a este projecto.
Bibliotecas estáticas
Bibliotecas estáticas são apropriadas quando você está reconstruindo o código usando as ferramentas atuais para cada projeto e você quer chamar o código de sobrecarga mínima. Esta é a opção de escolher se você provavelmente não vai estar usando o exato mesmo binário em vários projetos, construídos em épocas diferentes.
O compilador precisa saber o local da biblioteca estática (. lib) e seu associado cabeçalho (. h) para vincular com êxito o código compilado para o aplicativo. Isso pode ser feito clicando sobre a solução e selecionando Propriedades comuns | A lista de projetos e verificar o arquivo. lib (WsaLibCpp) como uma dependência do projeto dependências e, em seguida, seu projeto (WsaWrcCpp). Em seguida, botão direito do mouse sobre o projeto (WsaWrcCpp), selecione Propriedades | Propriedades comuns | Referências | Adicionar nova referência | Solution| Projetos e escolha seu arquivo. lib (WsaLibCpp).
Agora precisa deixar o projeto sabe onde encontrar o arquivo de cabeçalho projetos. lib. Se você estiver executando através da solução de amostra, botão direito do mouse no projeto WsaWrcCpp (WRC) e selecione Propriedades | Propriedades de configuração | C/C++ | Geral e conjunto o "diretórios de inclusão adicionais" para o local do arquivo de cabeçalho, neste caso, que seria $(SolutionDir) WsaLibCpp; < caminhos existentes >.
DLLs
Na amostra para download solução você encontrará um aplicativo de armazenamento Windows DLL para um projeto C++ chamado WsaDllCpp (como em Figura 2). Eu usei o artigo da Biblioteca MSDN , "passo a passo: Criando e usando uma biblioteca de Link dinâmico (C++) "(bit.ly/1enxzWc) como referência. Note-se que este projecto é para fins de demonstração, apenas como o uso dessa DLL tem sido desencorajado (na minha correspondência com os desenvolvedores do Microsoft C++ e revisores). Eu incluí isso porque você pode precisar usar DLLs existentes em seu aplicativo do Windows Store.
Com isso em mente, a DLL de WsaDllCpp dá a solução Contoso WRL (o modelo de biblioteca de classe WRL discutido anteriormente) com a capacidade de adicionar duas seqüências de caracteres juntos; por exemplo, o WsaDllCpp::Calculator::Add("1000","2000") produz 3000. O código de interface a seguir destaca a diferença entre um C++ DLL sobre o DLL c# como você sabe disso:
#pragma once
#include <string>
#define WSADLLCPP_API __declspec(dllexport)
namespace WsaDllCpp
{
class Calculator
{
public:
WSADLLCPP_API int Add(const wchar_t* numberOne,
const wchar_t* numberTwo);
WSADLLCPP_API int Add(int numberOne, int numberTwo);
};
}
Como você pode ver, há um pouquinho de sobrecarga associada fazendo funções visíveis para bibliotecas externas e aplicações ( declspec). Da mesma forma, as configurações necessárias para compilar com êxito o WsaDllCpp para o aplicativo ir além de simplesmente definir uma referência de projeto. Tive de botão direito do mouse sobre o projeto da Contoso WRL e selecione Propriedades | Propriedades de configuração | C/C++ | Geral e conjunto o "diretórios de inclusão adicionais" para o local do arquivo de cabeçalho.
Os desenvolvedores de c# podem encontrar adicionando uma referência para uma DLL não é intuitiva, ou pelo menos não é o que está acostumado, como normalmente há um link "referência" na lista do projeto no qual botão direito do mouse (que você encontrará no projeto WRC). Como com o arquivo. lib, para adicionar uma referência você terá com o botão direito do mouse no projeto e selecione Add | Referência e, em seguida, clique no botão Adicionar de referência novo.
Ao contrário com c# desenvolvimento, você não pode presumir os caminhos que você selecionar serão convertidos para caminhos relativos — eles não vão. É melhor se acostumar a usar as macros Visual Studio para especificar seus caminhos. No exemplo anterior, eu tinha que definir o "diretórios de inclusão adicionais" para WsaDllCpp $(SolutionDir); < caminhos existentes >.
Conclusão
Uma vez que você aprimorar em que estante correta, você descobrirá uma riqueza de informações (particularmente na Biblioteca MSDN), tornando seu processo de aprendizagem mais eficiente e gratificante. Este primeiro passo em direção a uma compreensão básica do domínio do C++ irá ajudá-lo em sua pesquisa e desenvolvimento de aplicações C++ Windows Store. Há tanta informação que não se aplica (tais como legados C++, MFC, C + + / CLI e, na maior parte, ATL) que esta consciência irá impedir de perder valiosos ciclos com material que poderia levá-lo por uma longa estrada para um beco sem saída.
Eu também recomendo você revisar artigos MSDN Magazine de Kenny Kerr (bit.ly/1iv7mUQ) e canal 9 (bit.ly/1dFqYjV), assim como Michael B. Artigos do McLaughlin em bit.ly/1b5CDhs. (Um recurso valioso não listado neste site é a sua "c# para C++ – um pouco curto guia," disponível em bit.ly/MvdZv4.)
Se você se concentrar sua atenção em C + + / CX, C++ modernos e sobre como usar o componente WinRT, você estará bem em seu caminho para alcançar seus objetivos no ambiente de desenvolvimento de aplicativo Windows Store.
Bill Kratochvil é o proprietário da Global Webnet LLC, uma empresa baseada em Amarillo, Texas que realiza contrato de arquitetura de software e desenvolvimento. Atualmente, Kratochvil está em contrato com uma empresa líder na indústria médica.
AGRADECEMOS aos seguintes especialistas técnicos da Microsoft pela revisão deste artigo: Mohammad Al-Sabt, John Cuyle, Chris Guzak, Frantisek Kaduk, Ben Kuhn e Thomas Petchel. Além disso, graças a Steven Southwick.
John Cuyle é um desenvolvedor de software no grupo de publicação Studios da Microsoft Studios. Ele tem mais de experiência dez anos de em desenvolvimento de jogos em C++, e mais alguns anos de experimentam de jogá-los.
Ben Kuhn tem sido um desenvolvedor na Microsoft há 11 anos, trabalhando em tecnologias de impressão de transferência para o tempo de execução do Windows. Mais recentemente, Ben contribuiu para o design das extensões de linguagem C++ para Windows Runtime e ajudou a criar o pacote de amostra de 8.1 do Windows.
Thomas Petchel é um gerente sênior de conteúdo editorial para o Visual C++ e tem sido com a equipe há oito anos. Ele ama o C++ por sua potência, desempenho e controle e acha que você também deveria.
Frantisek Kaduk é engenheiro sênior de desenvolvimento de Software na equipe do Microsoft/Skype com mais de experiência 10 anos de em .NET. Ele era um membro da equipe que desenvolveu o aplicativo do Skype para Windows 8. x. Ele bloga infrequëntemente no https://blogs.msdn.com/b/fkaduk.
Steven Southwick é um. Desenvolvedor NET focado principalmente na modelagem de inscrição julgamento clínico usando as técnicas de análise e simulação de Monte Carlo.