建議使用 Visual Studio 2017

逐步解說: 建立使用 c + + 的 SDK

 

發行︰ 2016年7月

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

本逐步解說示範如何建立原生 c + + 數學程式庫 SDK 封裝 SDK 為 Visual Studio 擴充功能 (VSIX),並接著使用它來建立應用程式。 本逐步解說分成下列步驟︰

若要依照本逐步解說執行作業,您必須安裝 Visual Studio SDK。 如需詳細資訊,請參閱Visual Studio SDK

  1. 在功能表列上,選擇 [檔案] 、[新增] 、[專案] 。

  2. 在範本清單中,展開Visual c + +Windows 市集,然後選取DLL (Windows 市集應用程式)範本。 在名稱方塊中,指定NativeMath,然後選擇 [確定] 按鈕。

  3. 更新以符合下列程式碼 NativeMath.h。

    #pragma once
    
    class __declspec(dllexport) BasicMath 
    {
    public:
        BasicMath();
        double add(double firstNumber, double secondNumber);
        double subtract(double firstNumber, double secondNumber);
    };
    

  4. 更新 NativeMath.cpp 以符合這個程式碼︰

    // 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. 方案總管] 中,開啟捷徑功能表方案 'NativeMath',然後選擇 [新增新的專案

  6. 在範本清單中,展開Visual c + +,然後選取Windows 執行階段元件範本。 在名稱方塊中,指定NativeMathWRT,然後選擇 [確定] 按鈕。

  7. 更新以符合這個程式碼 Class1.h:

    #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 以符合這個程式碼︰

    // 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. 在功能表列上,選擇 [建置] 、[建置方案] 。

  1. 方案總管] 中,開啟捷徑功能表方案 'NativeMath',然後選擇 [新增新的專案

  2. 在範本清單中,展開Visual C#擴充性,然後選取VSIX 套件。 在名稱方塊中,指定NativeMathVSIX,然後選擇 [確定] 按鈕。

  3. VSIX 資訊清單設計工具出現時,請將其關閉。

  4. 方案總管] 中,開啟捷徑功能表source.extension.vsixmanifest,然後選擇 [檢視程式碼

  5. 使用下列 XML 程式碼取代現有的 XML。

  6. 方案總管] 中,開啟捷徑功能表NativeMathVSIX專案,然後再選擇新增新項目

  7. 在清單中Visual C# 項目,依序展開資料,然後選取XML 檔案。 在名稱方塊中,指定SDKManifest.xml,然後選擇 [確定] 按鈕。

  8. 使用此 XML 取代檔案的內容︰

    <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>
    

  9. 方案總管] 中,請在NativeMathVSIX專案中,建立此資料夾結構︰

    
    \DesignTime  
          \CommonConfiguration  
                \Neutral  
                      \Include  
          \Debug  
                \x86  
    \Redist  
          \Debug  
                \x86  
    \References  
          \CommonConfiguration  
                \Neutral  
    
    
  10. 方案總管] 中,開啟捷徑功能表方案 'NativeMath',然後選擇 [在檔案總管] 中開啟資料夾

  11. 檔案總管,複製 \NativeMath\NativeMath.h,然後在方案總管] 中,請在NativeMathVSIX專案中,將它貼在 \DesignTime\CommonConfiguration\Neutral\Include\ 資料夾中。

    複製 \Debug\NativeMath\NativeMath.lib,,然後將它貼在 \DesignTime\Debug\x86\ 資料夾中。

    複製 \Debug\NativeMath\NativeMath.dll,並將它貼在 \Redist\Debug\x86\ 資料夾中。

    複製 DebugNativeMathWRTNativeMathWRT.dll,並將它貼在 RedistDebugx86 資料夾中。

    複製 DebugNativeMathWRTNativeMathWRT.winmd,並將它貼在 ReferencesCommonConfigurationNeutral 資料夾中。

    複製 DebugNativeMathWRTNativeMathWRT.pri,並將它貼在 ReferencesCommonConfigurationNeutral 資料夾中。

  12. 在 \DesignTime\Debug\x86\ 資料夾中,建立名為 NativeMathSDK.props,文字檔案,然後貼上下列內容它︰

  13. 在功能表列上選擇 [檢視其他視窗屬性] 視窗(鍵盤︰ 選擇 F4 鍵)。

  14. 方案總管] 中,請選取NativeMathWRT.winmd檔案。 在屬性] 視窗中,變更建置動作屬性內容,然後變更Include in VSIX屬性True

    重複此程序SimpleMath.pri檔案。

    重複此程序NativeMath.Lib檔案。

    重複此程序NativeMathSDK.props檔案。

  15. 方案總管] 中,請選取NativeMath.h檔案。 在屬性] 視窗中,變更Include in VSIX屬性True

    重複此程序NativeMath.dll檔案。

    重複此程序NativeMathWRT.dll檔案。

    重複此程序SDKManifest.xml檔案。

  16. 在功能表列上,選擇 [建置] 、[建置方案] 。

  17. 方案總管] 中,開啟捷徑功能表NativeMathVSIX專案,然後再選擇在檔案總管] 中開啟資料夾

  18. 檔案總管,巡覽至 \bin\Debug\ 資料夾中,然後再執行 [NativeMathVSIX.vsix 開始安裝。

  19. 選擇安裝] 按鈕,等候安裝完成,然後再重新啟動 Visual Studio。

  1. 在功能表列上,選擇 [檔案] 、[新增] 、[專案] 。

  2. 在範本清單中,展開Visual c + +Windows 市集,然後選取空白應用程式。 在名稱方塊中,指定NativeMathSDKSample,然後選擇 [確定] 按鈕。

  3. 方案總管] 中,開啟捷徑功能表NativeMathSDKSample專案,然後再選擇新增參考

  4. 通用屬性架構和參考參考型別的清單中的屬性頁面上,展開Windows,然後選取延伸模組。 在詳細資料窗格中,選取原生 Math SDK延伸模組,然後選擇 [加入新參考] 按鈕。

  5. 加入參考對話方塊中,選取原生 Math SDK核取方塊,然後按一下確定] 按鈕。

  6. 顯示 NativeMathSDKSample 專案屬性。

    加入參考時,已套用您在 NativeMathSDK.props 中定義的屬性。 您可以檢查來確認這VC + + 目錄專案的屬性組態屬性

  7. 方案總管] 中,開啟 MainPage.xaml,然後使用下列 XAML 來取代其內容︰

    <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>
    

  8. 更新 mainpage.xaml.h 中,以符合這個程式碼︰

    //
    // 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);
        };
    }
    

  9. 更新 MainPage.xaml.cpp 以符合這個程式碼︰

    //
    // 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());
    
    }
    

  10. 選擇 F5 鍵以執行應用程式。

  11. 在應用程式中,輸入任何兩個數字選取作業,然後選擇 [ ** = ** ] 按鈕。

    正確的結果會出現。

本逐步解說說明如何建立和使用擴充功能 SDK 來呼叫Windows 執行階段程式庫和非Windows 執行階段程式庫。

逐步解說︰ 建立使用 C# 或 Visual Basic 的 SDK
建立軟體開發套件

顯示: