İzlenecek yol: C++ kullanarak SDK oluşturma

Bu kılavuzda yerel bir C++ matematik kitaplığı SDK'sı oluşturma, SDK'yı Visual Studio Uzantısı (VSIX) olarak paketleme ve uygulama oluşturmak için bunu kullanma gösterilmektedir. İzlenecek yol şu adımlara ayrılmıştır:

Önkoşullar

Bu kılavuzu izlemek için Visual Studio SDK'sını yüklemeniz gerekir. Daha fazla bilgi için bkz . Visual Studio SDK'sı.

Yerel ve Windows Çalışma Zamanı kitaplıkları oluşturmak için

  1. Menü çubuğunda Dosya Yeni Proje'yi> seçin.>

  2. Şablon listesinde Visual C++>Windows Evrensel'i genişletin ve dll (Windows Evrensel uygulamaları) şablonunu seçin. Ad kutusunda öğesini belirtin NativeMathve ardından Tamam düğmesini seçin.

  3. NativeMath.h dosyasını aşağıdaki kodla eşleşecek şekilde güncelleştirin.

    #pragma once
    
    class __declspec(dllexport) BasicMath 
    {
    public:
        BasicMath();
        double add(double firstNumber, double secondNumber);
        double subtract(double firstNumber, double secondNumber);
    };
    
  4. NativeMath.cpp dosyasını bu kodla eşleşecek şekilde güncelleştirin:

    // NativeMath.cpp : Defines the exported functions for the DLL application.
    //
    
    #include "pch.h"
    #include "NativeMath.h"
    
    
    BasicMath::BasicMath()
    {
    }
    
    double BasicMath::add(double firstNumber, double secondNumber)
    {
        return firstNumber + secondNumber;
    }
    
    double BasicMath::subtract(double firstNumber, double secondNumber)
    {
        return firstNumber - secondNumber;
    }
    
  5. Çözüm Gezgini'da Çözüm 'NativeMath' kısayol menüsünü açın ve ardından Yeni Proje Ekle'yi>seçin.

  6. Şablon listesinde Visual C++ öğesini genişletin ve Windows Çalışma Zamanı Bileşeni şablonunu seçin. Ad kutusunda öğesini belirtin NativeMathWRTve ardından Tamam düğmesini seçin.

  7. Sınıf1.h'yi bu kodla eşleşecek şekilde güncelleştirin:

    #pragma once
    
    namespace NativeMathWRT
    {
        public ref class BasicMathWinMD sealed
        {
        public:
            BasicMathWinMD(){};
            double multiply(double firstNumber, double secondNumber);
            double divide(double firstNumber, double secondNumber);
        };
    }
    
  8. Class1.cpp dosyasını bu kodla eşleşecek şekilde güncelleştirin:

    // Class1.cpp
    #include "pch.h"
    #include "Class1.h"
    
    using namespace NativeMathWRT;
    using namespace Platform;
        
    double BasicMathWinMD::multiply(double firstNumber, double secondNumber)
    {
        return firstNumber * secondNumber;
    }
    
    double BasicMathWinMD::divide(double firstNumber, double secondNumber)
    {
        if(0 == secondNumber) 
            return -1;
    
        return firstNumber / secondNumber;
    }
    
  9. Menü çubuğunda Derleme Çözümü Oluştur'u>seçin.

NativeMathVSIX uzantı projesini oluşturmak için

  1. Çözüm Gezgini'da Çözüm 'NativeMath' kısayol menüsünü açın ve ardından Yeni Proje Ekle'yi>seçin.

  2. Şablon listesinde Visual C#>Genişletilebilirlik'i genişletin ve VSIX Projesi'ni seçin. Ad kutusunda NativeMathVSIX öğesini belirtin ve ardından Tamam düğmesini seçin.

  3. Çözüm Gezgini'da source.extension.vsixmanifest kısayol menüsünü açın ve kodu görüntüle'yi seçin.

  4. Mevcut XML'yi değiştirmek için aşağıdaki XML'yi kullanın.

    <PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
      <Metadata>
        <Identity Id="NativeMathVSIX..c6b3cae1-e7e2-4e71-90f6-21017ea0dff7" Version="1.0" Language="en-US" Publisher="MyName" />
        <DisplayName>Native Math SDK</DisplayName>
        <Description>Native Math Library w/ Windows Runtime Additions</Description>
      </Metadata>
      <Installation Scope="Global" AllUsers="true">
        <InstallationTarget Id="Microsoft.ExtensionSDK" TargetPlatformIdentifier="Windows" TargetPlatformVersion="v8.0" SdkName="NativeMathSDK" SdkVersion="1.0" />
      </Installation>
      <Dependencies>
      </Dependencies>
      <Assets>
        <Asset Type="Microsoft.ExtensionSDK" d:Source="File" Path="SDKManifest.xml" />
      </Assets>
    </PackageManifest>
    
  5. Çözüm Gezgini'de NativeMathVSIX projesinin kısayol menüsünü açın ve ardından Yeni Öğe Ekle'yi>seçin.

  6. Visual C# Öğeleri listesinde Veri'yi genişletin ve XML Dosyası'nı seçin. Ad kutusunda öğesini belirtin SDKManifest.xmlve ardından Tamam düğmesini seçin.

  7. Dosyanın içeriğini değiştirmek için şu XML'i kullanın:

    <FileList
      Identity = "NativeMathSDK, Version=1.0"
      DisplayName = "Native Math SDK"
      MinVSVersion = "11.0"
      AppliesTo = "WindowsAppContainer + (CSharp | VB | VisualC)">
      <File Reference="NativeMathWRT.winmd" Implementation="NativeMathWRT.dll" />
    </FileList>
    
  8. Çözüm Gezgini'de NativeMathVSIX projesi altında şu klasör yapısını oluşturun:

    \DesignTime
          \CommonConfiguration
                \Neutral
                      \Include
          \Debug
                \x86
    \Redist
          \Debug
                \x86
    \References
          \CommonConfiguration
                \Neutral
    
  9. Çözüm Gezgini'da Çözüm 'NativeMath' kısayol menüsünü açın ve ardından Klasörü Dosya Gezgini Aç'ı seçin.

  10. Dosya Gezgini $SolutionRoot$\NativeMath\NativeMath.h dosyasını kopyalayın ve Çözüm Gezgini NativeMathVSIX projesinin altına $SolutionRoot$\NativeMathVSIX\DesignTime\CommonConfiguration\Neutral\Include\ klasörüne yapıştırın.

    $SolutionRoot$\Debug\NativeMath\NativeMath.lib dosyasını kopyalayın ve $SolutionRoot$\NativeMathVSIX\DesignTime\Debug\x86\ klasörüne yapıştırın.

    $SolutionRoot$\Debug\NativeMath\NativeMath.dll dosyasını kopyalayın ve $SolutionRoot$\NativeMathVSIX\Redist\Debug\x86\ klasörüne yapıştırın.

    $SolutionRoot$\Debug\NativeMathWRT\NativeMathWRT.dll dosyasını kopyalayın ve $SolutionRoot$\NativeMathVSIX\Redist\Debug\x86 klasörüne yapıştırın. $SolutionRoot$\Debug\NativeMathWRT\NativeMathWRT.winmd dosyasını kopyalayın ve $SolutionRoot$\NativeMathVSIX\References\CommonConfiguration\Neutral klasörüne yapıştırın.

    $SolutionRoot$\Debug\NativeMathWRT\NativeMathWRT.pri dosyasını kopyalayın ve $SolutionRoot$\NativeMathVSIX\References\CommonConfiguration\Neutral klasörüne yapıştırın.

  11. $SolutionRoot$\NativeMathVSIX\DesignTime\Debug\x86\ klasöründe NativeMathSDK.props adlı bir metin dosyası oluşturun ve sonra aşağıdaki içeriği yapıştırın:

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <NativeMathSDKPath>$(FrameworkSDKRoot)\..\..\UAP\v0.8.0.0\ExtensionSDKs\NativeMathSDK\1.0\</NativeMathSDKPath>
        <IncludePath>$(NativeMathSDKPath)DesignTime\CommonConfiguration\Neutral\Include;$(IncludePath)</IncludePath>
        <LibraryPath>$(NativeMathSDKPath)DesignTime\Debug\x86;$(LibraryPath)</LibraryPath>
      </PropertyGroup>
      <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
         <Link>
           <AdditionalDependencies>NativeMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
         </Link>
      </ItemDefinitionGroup>
    </Project>
    
  12. Menü çubuğunda Diğer Windows>Özellikleri Penceresini Görüntüle'yi>seçin (Klavye: F4 tuşunu seçin).

  13. Çözüm Gezgini'da NativeMathWRT.winmd dosyasını seçin. Özellikler penceresinde, Derleme Eylemi özelliğini İçerik olarak değiştirin ve ardından VSIX'e Ekle özelliğini True olarak değiştirin.

    NativeMath.h dosyası için bu işlemi yineleyin.

    NativeMathWRT.pri dosyası için bu işlemi yineleyin.

    NativeMath.Lib dosyası için bu işlemi yineleyin.

    NativeMathSDK.props dosyası için bu işlemi yineleyin .

  14. Çözüm Gezgini'da NativeMath.h dosyasını seçin. Özellikler penceresinde VSIX'e Ekle özelliğini True olarak değiştirin.

    NativeMath.dll dosyası için bu işlemi yineleyin.

    NativeMathWRT.dll dosyası için bu işlemi yineleyin.

    SDKManifest.xml dosyası için bu işlemi yineleyin.

  15. Menü çubuğunda Derleme Çözümü Oluştur'u>seçin.

  16. Çözüm Gezgini NativeMathVSIX projesinin kısayol menüsünü açın ve Dosya Gezgini Klasörü Aç'ı seçin.

  17. Dosya Gezgini'da $SolutionRoot$\NativeMathVSIX\bin\Debug klasörüne gidin ve ardından NativeMathVSIX.vsix komutunu çalıştırarak yüklemeyi başlatın.

  18. Yükle düğmesini seçin, yüklemenin tamamlanmasını bekleyin ve Visual Studio'yu açın.

Sınıf kitaplığını kullanan örnek bir uygulama oluşturmak için

  1. Menü çubuğunda Dosya Yeni Proje'yi> seçin.>

  2. Şablon listesinde Visual C++>Windows Evrensel'i genişletin ve ardından Boş Uygulama'yı seçin. Ad kutusunda NativeMathSDKSample öğesini belirtin ve ardından Tamam düğmesini seçin.

  3. Çözüm Gezgini'da NativeMathSDKSample projesinin kısayol menüsünü açın ve başvuru ekle'yi> seçin.

  4. Başvuru Ekle iletişim kutusunda, başvuru türleri listesinde Evrensel Windows'ı genişletin ve uzantılar'ı seçin. Son olarak, Yerel Matematik SDK'sı onay kutusunu seçin ve ardından Tamam düğmesini seçin.

  5. NativeMathSDKSample için proje özelliklerini görüntüleyin.

    NativeMathSDK.props içinde tanımladığınız özellikler, başvuruyu eklediğinizde uygulandı. Projenin Yapılandırma Özellikleri'nin VC++ Dizinleri özelliğini inceleyerek özelliklerin uygulandığını doğrulayabilirsiniz.

  6. Çözüm Gezgini MainPage.xaml dosyasını açın ve içeriğini değiştirmek için aşağıdaki XAML'yi kullanın:

    <Page
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:NativeMathSDKSample"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        x:Class="NativeMathSDKSample.MainPage"
        IsTabStop="false"
        mc:Ignorable="d">
    
        <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
            <TextBox x:Name="FirstNumber" HorizontalAlignment="Left" Margin="327,123,0,0" TextWrapping="Wrap" Text="1" VerticalAlignment="Top" Height="84" Width="259" FontSize="48"/>
            <TextBox x:Name="SecondNumber" HorizontalAlignment="Left" Margin="687,123,0,0" TextWrapping="Wrap" Text="1" VerticalAlignment="Top" Height="84" Width="271" FontSize="48"/>
            <Button x:Name="Execute" Content="=" HorizontalAlignment="Left" Margin="478,387,0,0" VerticalAlignment="Top" Height="63" Width="332" Click="Execute_Click"/>
            <RadioButton Name="add" Content="Add" HorizontalAlignment="Left" Margin="273,262,0,0" VerticalAlignment="Top" GroupName="Operation" IsChecked="True"/>
            <RadioButton Name="subtract" Content="Subtract" HorizontalAlignment="Left" Margin="453,262,0,0" VerticalAlignment="Top" GroupName="Operation" IsChecked="False"/>
            <RadioButton Name="multiplyWRT" Content="Multiply(WRT)" HorizontalAlignment="Left" Margin="615,262,0,0" VerticalAlignment="Top" GroupName="Operation" IsChecked="False"/>
            <RadioButton Name="divideWRT" Content="Divide(WRT)" HorizontalAlignment="Left" Margin="891,262,0,0" VerticalAlignment="Top" GroupName="Operation" IsChecked="False"/>
            <TextBlock Name="resultText" HorizontalAlignment="Left" Margin="478,525,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="332" Height="70" FontSize="48"/>
        </Grid>
    </Page>
    
  7. Mainpage.xaml.h dosyasını şu kodla eşleşecek şekilde güncelleştirin:

    //
    // MainPage.xaml.h
    // Declaration of the MainPage class.
    //
    
    #pragma once
    
    #include "MainPage.g.h"
    
    namespace NativeMathSDKSample
    {
        /// <summary>
        /// An empty page that can be used on its own or navigated to within a Frame.
        /// </summary>
        public ref class MainPage sealed
        {
        public:
            MainPage();
    
        protected:
            virtual void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e) override;
            virtual void Execute_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
        };
    }
    
  8. MainPage.xaml.cpp dosyasını şu kodla eşleşecek şekilde güncelleştirin:

    //
    // MainPage.xaml.cpp
    // Implementation of the MainPage class.
    //
    
    #include "pch.h"
    #include "MainPage.xaml.h"
    
    #include <sstream>
    
    #include "NativeMath.h"
    
    using namespace NativeMathSDKSample;
    
    using namespace Platform;
    using namespace Windows::Foundation;
    using namespace Windows::Foundation::Collections;
    using namespace Windows::UI::Xaml;
    using namespace Windows::UI::Xaml::Controls;
    using namespace Windows::UI::Xaml::Controls::Primitives;
    using namespace Windows::UI::Xaml::Data;
    using namespace Windows::UI::Xaml::Input;
    using namespace Windows::UI::Xaml::Media;
    using namespace Windows::UI::Xaml::Navigation;
    
    using namespace NativeMathWRT;
    
    // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
    
    MainPage::MainPage()
    {
        InitializeComponent();
    }
    
    /// <summary>
    /// Invoked when this page is about to be displayed in a Frame.
    /// </summary>
    /// <param name="e">Event data that describes how this page was reached.  The Parameter
    /// property is typically used to configure the page.</param>
    void MainPage::OnNavigatedTo(NavigationEventArgs^ e)
    {
    }
    
    void NativeMathSDKSample::MainPage::Execute_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
    {
        double iFirstNumber = _wtof(FirstNumber->Text->Data());
        double iSecondNumber = _wtof(SecondNumber->Text->Data());
        double result = 0;
    
        BasicMathWinMD^ basicMathWinMD = ref new BasicMathWinMD();
        BasicMath basicMath;
    
        if(add->IsChecked->Value == true)
        {
            result = basicMath.add(iFirstNumber, iSecondNumber);
        }
        else if(subtract->IsChecked->Value == true)
        {
            result = basicMath.subtract(iFirstNumber, iSecondNumber);
        }
        else if(multiplyWRT->IsChecked->Value == true)
        {
            result = basicMathWinMD->multiply(iFirstNumber, iSecondNumber);
        }
        else if (divideWRT->IsChecked->Value == true)
        {
            result = basicMathWinMD->divide(iFirstNumber, iSecondNumber);
        }
    
        std::wstringstream s;
        s << result;
    
        resultText->Text = ref new String(s.str().c_str());
    
    }
    
  9. Uygulamayı çalıştırmak için F5 tuşunu seçin.

  10. Uygulamada iki sayı girin, bir işlem seçin ve ardından düğmeyi = seçin.

    Doğru sonuç görüntülenir.

    Bu kılavuzda, Windows Çalışma Zamanı kitaplığına ve Windows Çalışma Zamanı olmayan bir kitaplığa çağrı yapmak için Uzantı SDK'sı oluşturma ve kullanma yönergeleri gösterildi.