Panduan: Membuat SDK menggunakan C++

Panduan ini menunjukkan cara membuat SDK pustaka matematika C++ asli, mengemas SDK sebagai Ekstensi Visual Studio (VSIX), lalu menggunakannya untuk membuat aplikasi. Panduan dibagi menjadi langkah-langkah berikut:

Prasyarat

Untuk mengikuti panduan ini, Anda harus menginstal Visual Studio SDK. Untuk informasi selengkapnya, lihat Visual Studio SDK.

Untuk membuat pustaka asli dan Windows Runtime

  1. Dari bilah menu, pilih File>New>Project.

  2. Dalam daftar templat, perluas Visual C++>Windows Universal, lalu pilih templat DLL (aplikasi Windows Universal). Dalam kotak Nama , tentukan NativeMath, lalu pilih tombol OK .

  3. Perbarui NativeMath.h agar sesuai dengan kode berikut.

    #pragma once
    
    class __declspec(dllexport) BasicMath 
    {
    public:
        BasicMath();
        double add(double firstNumber, double secondNumber);
        double subtract(double firstNumber, double secondNumber);
    };
    
  4. Perbarui NativeMath.cpp agar sesuai dengan kode ini:

    // 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. Di Penjelajah Solusi, buka menu pintasan untuk Solusi 'NativeMath', lalu pilih Tambahkan>Proyek Baru.

  6. Dalam daftar templat, perluas Visual C++, lalu pilih templat Komponen Runtime Windows. Dalam kotak Nama , tentukan NativeMathWRT, lalu pilih tombol OK .

  7. Perbarui Class1.h agar sesuai dengan kode ini:

    #pragma once
    
    namespace NativeMathWRT
    {
        public ref class BasicMathWinMD sealed
        {
        public:
            BasicMathWinMD(){};
            double multiply(double firstNumber, double secondNumber);
            double divide(double firstNumber, double secondNumber);
        };
    }
    
  8. Perbarui Class1.cpp agar sesuai dengan kode ini:

    // 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. Pada bilah menu, pilih Bangun>Bangun Solusi.

Untuk membuat proyek ekstensi NativeMathVSIX

  1. Di Penjelajah Solusi, buka menu pintasan untuk Solusi 'NativeMath', lalu pilih Tambahkan>Proyek Baru.

  2. Dalam daftar templat, perluas Visual C#>Extensibility, lalu pilih Proyek VSIX. Dalam kotak Nama , tentukan NativeMathVSIX, lalu pilih tombol OK .

  3. Di Penjelajah Solusi, buka menu pintasan untuk source.extension.vsixmanifest, lalu pilih Tampilkan Kode.

  4. Gunakan XML berikut untuk mengganti XML yang sudah ada.

    <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. Di Penjelajah Solusi, buka menu pintasan untuk proyek NativeMathVSIX, lalu pilih Tambahkan>Item Baru.

  6. Dalam daftar Item Visual C#, perluas Data, lalu pilih File XML. Dalam kotak Nama , tentukan SDKManifest.xml, lalu pilih tombol OK .

  7. Gunakan XML ini untuk menggantikan isi file:

    <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. Di Penjelajah Solusi, di bawah proyek NativeMathVSIX, buat struktur folder ini:

    \DesignTime
          \CommonConfiguration
                \Neutral
                      \Include
          \Debug
                \x86
    \Redist
          \Debug
                \x86
    \References
          \CommonConfiguration
                \Neutral
    
  9. Di Penjelajah Solusi, buka menu pintasan untuk Solusi 'NativeMath', lalu pilih Buka Folder di File Explorer.

  10. Di File Explorer, salin $SolutionRoot$\NativeMath\NativeMath.h, lalu di Penjelajah Solusi, di bawah proyek NativeMathVSIX, tempelkan di folder $SolutionRoot$\NativeMathVSIX\DesignTime\CommonConfiguration\Neutral\Include\.

    Salin $SolutionRoot$\Debug\NativeMath\NativeMath.lib, lalu tempelkan di folder $SolutionRoot$\NativeMathVSIX\DesignTime\Debug\x86\ .

    Salin $SolutionRoot$\Debug\NativeMath\NativeMath.dll dan tempelkan di folder $SolutionRoot$\NativeMathVSIX\Redist\Debug\x86\ .

    Salin $SolutionRoot$\Debug\NativeMathWRT\NativeMathWRT.dll dan tempelkan di folder $SolutionRoot$\NativeMathVSIX\Redist\Debug\x86 . Salin $SolutionRoot$\Debug\NativeMathWRT\NativeMathWRT.winmd dan tempelkan di folder $SolutionRoot$\NativeMathVSIX\References\CommonConfiguration\Neutral .

    Salin $SolutionRoot$\Debug\NativeMathWRT\NativeMathWRT.pri dan tempelkan di folder $SolutionRoot$\NativeMathVSIX\References\CommonConfiguration\Neutral .

  11. Di folder $SolutionRoot$\NativeMathVSIX\DesignTime\Debug\x86\, buat file teks bernama NativeMathSDK.props, lalu tempelkan konten berikut di dalamnya:

    <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. Pada bilah menu, pilih Tampilkan>Jendela Properti Windows>Lainnya (Keyboard: Pilih tombol F4).

  13. Di Penjelajah Solusi, pilih file NativeMathWRT.winmd. Di jendela Properti , ubah properti Tindakan Build menjadi Konten, lalu ubah properti Sertakan di VSIX menjadi True.

    Ulangi proses ini untuk file NativeMath.h .

    Ulangi proses ini untuk file NativeMathWRT.pri .

    Ulangi proses ini untuk file NativeMath.Lib .

    Ulangi proses ini untuk file NativeMathSDK.props .

  14. Di Penjelajah Solusi, pilih file NativeMath.h. Di jendela Properti , ubah properti Sertakan di VSIX menjadi True.

    Ulangi proses ini untuk file NativeMath.dll .

    Ulangi proses ini untuk file NativeMathWRT.dll .

    Ulangi proses ini untuk file SDKManifest.xml .

  15. Pada bilah menu, pilih Bangun>Bangun Solusi.

  16. Di Penjelajah Solusi, buka menu pintasan untuk proyek NativeMathVSIX, lalu pilih Buka Folder di File Explorer.

  17. Di File Explorer, navigasikan ke folder $SolutionRoot$\NativeMathVSIX\bin\Debug , lalu jalankan NativeMathVSIX.vsix untuk memulai penginstalan.

  18. Pilih tombol Instal , tunggu hingga penginstalan selesai, lalu buka Visual Studio.

Untuk membuat aplikasi sampel yang menggunakan pustaka kelas

  1. Dari bilah menu, pilih File>New>Project.

  2. Dalam daftar templat, perluas Visual C++>Windows Universal lalu pilih Aplikasi Kosong. Dalam kotak Nama , tentukan NativeMathSDKSample, lalu pilih tombol OK .

  3. Di Penjelajah Solusi, buka menu pintasan untuk proyek NativeMathSDKSample, lalu pilih Tambahkan>Referensi.

  4. Dalam kotak dialog Tambahkan Referensi , dalam daftar jenis referensi, perluas Universal Windows, lalu pilih Ekstensi. Terakhir, Pilih kotak centang SDK Matematika Asli, lalu pilih tombol OK .

  5. Tampilkan properti proyek untuk NativeMathSDKSample.

    Properti yang Anda tentukan di NativeMathSDK.props diterapkan saat Anda menambahkan referensi. Anda dapat memverifikasi bahwa properti diterapkan dengan memeriksa properti Direktori VC++ dari Properti Konfigurasi proyek.

  6. Di Penjelajah Solusi, buka MainPage.xaml, lalu gunakan XAML berikut untuk mengganti kontennya:

    <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. Perbarui Mainpage.xaml.h agar sesuai dengan kode ini:

    //
    // 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. Perbarui MainPage.xaml.cpp agar sesuai dengan kode ini:

    //
    // 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. Pilih kunci F5 untuk menjalankan aplikasi.

  10. Di aplikasi, masukkan dua angka apa pun, pilih operasi, lalu pilih tombol = .

    Hasil yang benar muncul.

    Panduan ini menunjukkan cara membuat dan menggunakan SDK Ekstensi untuk memanggil ke pustaka Windows Runtime dan pustaka Runtime non-Windows.