青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++ Coder

HCP高性能計(jì)算架構(gòu),實(shí)現(xiàn),編譯器指令優(yōu)化,算法優(yōu)化, LLVM CLANG OpenCL CUDA OpenACC C++AMP OpenMP MPI

C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
  98 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks
http://www.ithov.com/article/118831.shtml

對(duì)于 Windows 8,我們徹底顛覆改造了平臺(tái),您可以選擇您已了解的編程語(yǔ)言和技術(shù)來(lái)構(gòu)建為設(shè)備和外形因素定制的應(yīng)用。而對(duì)于 Windows 運(yùn)行時(shí),您甚至可以在單一應(yīng)用中輕松地使用多種語(yǔ)言。通過(guò)使用 C++ 來(lái)構(gòu)建您自有的 Windows 運(yùn)行時(shí)組件,您可以通過(guò)可與 Xbox 360 控制器交互的 HTML 和 JavaScript 來(lái)構(gòu)建出色的 Metro 風(fēng)格應(yīng)用。您可以構(gòu)建通過(guò) Windows 運(yùn)行時(shí)組件公開(kāi)的可重用 XAML 控件,這些控件可供使用 C++ 和 C# 編寫(xiě)的 Metro 風(fēng)格應(yīng)用即時(shí)使用。實(shí)質(zhì)上,我們已允許您在 Windows 8 平臺(tái)上使用您選擇的語(yǔ)言并以毫不遷就的方式來(lái)構(gòu)建應(yīng)用。

在本篇博文中,我們將討論構(gòu)建 Windows 運(yùn)行時(shí)組件所需了解的必要知識(shí)。

基礎(chǔ)知識(shí)

Windows 運(yùn)行時(shí)是實(shí)現(xiàn)語(yǔ)言選擇的核心。它自身是公開(kāi)的,從而您可以從 JavaScript、C++、C# 和 Visual Basic 中以自然而熟悉的方式對(duì)其進(jìn)行調(diào)用。這種基礎(chǔ)方法也同樣適用于構(gòu)建您自有的 API。

您在應(yīng)用中構(gòu)建和打包的 Windows 運(yùn)行時(shí)組件通常被稱(chēng)作第三方 Windows 運(yùn)行時(shí)組件。這與已作為 Windows 8 平臺(tái)中一部分的第一方組件有所不同。您可以使用 C++、C# 或 Visual Basic 編寫(xiě)這些第三方 Windows 運(yùn)行時(shí)組件。您可以從任何位置調(diào)入它們公開(kāi)的 API,包括打包到您的應(yīng)用中的其他 Windows 運(yùn)行時(shí)組件。您也可以使用任何語(yǔ)言來(lái)調(diào)入通過(guò) Windows 運(yùn)行時(shí)組件公開(kāi)的 API。

您為應(yīng)用編寫(xiě)的 Windows 運(yùn)行時(shí)組件可使用 Windows 運(yùn)行時(shí) API、Win32、COM、.NET API 或第三方庫(kù)(只要它們支持 Metro 風(fēng)格應(yīng)用開(kāi)發(fā))。請(qǐng)注意您所構(gòu)建的 Windows 運(yùn)行時(shí)組件與傳統(tǒng)意義上公開(kāi) API 的 C++ DLL 或 .NET 程序集并不相同。使用 .Net 創(chuàng)建類(lèi)庫(kù)或者使用 C++ 創(chuàng)建獨(dú)立的 DLL 與構(gòu)建 Windows 運(yùn)行時(shí)組件完全不同。Windows 運(yùn)行時(shí)組件在公開(kāi) Windows 運(yùn)行時(shí)元數(shù)據(jù)的 .wnmd 文件中聲明,并且允許 JavaScript 等語(yǔ)言來(lái)自然地使用 Windows 運(yùn)行時(shí) API(例如,向 JavaScript 公開(kāi)的 API 的 pascalCasedNames 支持)。Windows 運(yùn)行時(shí)元數(shù)據(jù)還允許 Visual Studio 提供出色的工具功能,如 IntelliSense 支持。

為何要構(gòu)建您自有的 Windows 運(yùn)行時(shí)組件

創(chuàng)建 Windows 運(yùn)行時(shí)組件可幫助您對(duì)可重用性和語(yǔ)言互操作性進(jìn)行設(shè)計(jì)。我們來(lái)看一下展示如何使用第三方 Windows 運(yùn)行時(shí)組件來(lái)構(gòu)建更佳體驗(yàn)的一些應(yīng)用程序方案。


在您的 Metro 風(fēng)格應(yīng)用中使用 Win32 和 COM API

Internet Explorer 10 提供的平臺(tái)允許您使用 HTML、CSS 和 JavaScript 創(chuàng)建出色的 Metro 風(fēng)格應(yīng)用體驗(yàn)。但是,如果您已使用 HTML5 Canvas 構(gòu)建游戲,并希望與 Windows 的 Xbox 360 控制器相集成,那情況會(huì)怎樣?允許應(yīng)用從控制器接收輸入的 XInput API 會(huì)將不可用的 Win32 API 直接向 JavaScript 公開(kāi)。

這是通過(guò)創(chuàng)建 Windows 運(yùn)行時(shí)組件來(lái)解決該問(wèn)題并使您能夠在基于 HTML 的 Metro 風(fēng)格應(yīng)用中使用 XInput API 的經(jīng)典示例。XInput 和 JavaScript 控制器草圖示例準(zhǔn)確地展現(xiàn)了這一點(diǎn)。該示例應(yīng)用包含一個(gè)游戲控制器 Windows 運(yùn)行時(shí)組件,它使用 C++ 編寫(xiě)并用于包裝 XInput API 公開(kāi)的功能。該控制器草圖基于 HTML 的應(yīng)用使用游戲控制器 C++ Windows 運(yùn)行時(shí)組件來(lái)實(shí)現(xiàn)與 Xbox 360 控制器的交互。

這一方案(無(wú)法單獨(dú)使用 HTML 和 JavaScript 實(shí)現(xiàn))是通過(guò)創(chuàng)建第三方 Windows 運(yùn)行時(shí)組件來(lái)完成通過(guò)其他方法無(wú)法完成的復(fù)雜方案的完美示例。

大計(jì)算量的操作

為諸如科學(xué)、工程和地圖/地理等字段創(chuàng)建應(yīng)用通常需要大計(jì)算量的操作。這些大量的操作通常需要強(qiáng)大的并行處理且非常適合于使用 C++ 獲得最佳性能。在開(kāi)發(fā) Bing 地圖旅行優(yōu)化器(使用 JavaScript 和 C++ 開(kāi)發(fā)的 Metro 風(fēng)格應(yīng)用)中,我們看到了另一種方案,即使用 C++ 創(chuàng)建 Windows 運(yùn)行時(shí)組件使我們可以創(chuàng)建最佳的應(yīng)用體驗(yàn)。

您可能會(huì)考慮為何用戶完全使用本地?cái)?shù)據(jù)計(jì)算旅行路線,而他們可以在云端的 Bing 服務(wù)器上運(yùn)行這種大計(jì)算量的操作。Bing 地圖為公開(kāi)執(zhí)行此操作的 JavaScript API,而有時(shí)應(yīng)用必須脫機(jī)運(yùn)行。另外,我們也希望用戶通過(guò)觸控實(shí)時(shí)拖動(dòng)和更改路線。如果我們?cè)诒镜剡\(yùn)行此類(lèi)大量的操作,則我們需要?jiǎng)?chuàng)建甚至更好的體驗(yàn)。

通過(guò)使用并行任務(wù)類(lèi)庫(kù)而用 C++ 編寫(xiě)大計(jì)算量的操作,我們可以利用客戶端的強(qiáng)大功能來(lái)為用戶創(chuàng)建出色的使用體驗(yàn)。Windows 運(yùn)行時(shí)可完美適用于該方案,它允許我們使用 Bing 地圖 AJAX 控件來(lái)創(chuàng)建使用 HTML 和 JavaScript 的豐富用戶界面 (UI),而使用 C++ 代碼運(yùn)行的所有大量路線操作可通過(guò)并行計(jì)算提高計(jì)算的速度。


庫(kù)

社區(qū)中擁有著大量而出色的庫(kù),開(kāi)發(fā)人員已進(jìn)行匯總并與廣大用戶共享。在過(guò)去,您可能會(huì)認(rèn)為重用其中的一些庫(kù)可能很具挑戰(zhàn)性,如果它們與實(shí)現(xiàn)您的應(yīng)用的編程語(yǔ)言不匹配的話。例如,您構(gòu)建了一個(gè)出色的 .NET 應(yīng)用,但必須完成痛苦的互操作藍(lán)框(如 PInvoke),才能使用通過(guò) C++ 編寫(xiě)的庫(kù)。

Windows 運(yùn)行時(shí)可以彌合 Windows 8 中的語(yǔ)言分歧,使包含單個(gè)基本代碼的單一 Windows 運(yùn)行時(shí)組件庫(kù)可以擴(kuò)展至更廣泛的開(kāi)發(fā)人員,無(wú)論組件的語(yǔ)言或應(yīng)用的主要編程語(yǔ)言是什么。

現(xiàn)在,您可以創(chuàng)建一個(gè)可供全部 C++ 和 C# 開(kāi)發(fā)人員使用的公開(kāi) Windows 運(yùn)行時(shí)的單一 XAML 自定義控件。您可以在您的基于 XAML 或 HTML 的 Metro 風(fēng)格應(yīng)用中使用由開(kāi)發(fā)人員共享的各種數(shù)據(jù)存儲(chǔ) Windows 運(yùn)行時(shí)庫(kù)。所有這些方案均無(wú)需編寫(xiě)互操作代碼即可實(shí)現(xiàn)。

我們認(rèn)為 Windows 運(yùn)行時(shí)將惠及由開(kāi)發(fā)人員創(chuàng)建并與社區(qū)中廣泛的 Metro 風(fēng)格應(yīng)用??發(fā)人員共享的各種庫(kù)。現(xiàn)在,我們來(lái)看看兩個(gè)展示使用 C++/CX 和 C# 構(gòu)建第三該 Windows 運(yùn)行時(shí)組件的具體示例。

應(yīng)用場(chǎng)景 1:通過(guò)本機(jī)音頻來(lái)增強(qiáng)您的應(yīng)用

假設(shè)我們要使用擁有 C# 編寫(xiě)的應(yīng)用邏輯支持的 XAML 來(lái)構(gòu)建一個(gè)軟件合成器應(yīng)用。為了向我們的音樂(lè)應(yīng)用添加過(guò)濾器,我們將使用 XAudio 來(lái)直接控制音頻緩沖器。

將 Windows 運(yùn)行時(shí)組件添加到我們的解決方案

使用 Visual Studio,我們可以將全新的 C++ Windows 運(yùn)行時(shí)組件項(xiàng)目添加到我們現(xiàn)有的解決方案。該 Windows 運(yùn)行時(shí)組件包括音樂(lè)處理功能:

使用 Visual Studio 來(lái)將一個(gè)全新的 C++ Windows 運(yùn)行時(shí)組件添加到我們的音樂(lè)應(yīng)用
圖 2:添加一個(gè)全新的 C++ Windows 運(yùn)行時(shí)組件

Visual Studio 為我們創(chuàng)建了一個(gè) C++ 項(xiàng)目,用于公開(kāi) API,而 API 的實(shí)現(xiàn)將打包到一個(gè) DLL 文件,而 Windows 運(yùn)行時(shí)元數(shù)據(jù)將打包到 winmd 文件中。它們?nèi)靠捎糜谖覀兊?C# 項(xiàng)目。

定義向我們的 XAML C# 項(xiàng)目公開(kāi)的類(lèi)

我們使用 C++/CX 來(lái)構(gòu)建向 C# 項(xiàng)目公開(kāi)的 API,但您也可以使用 Windows 運(yùn)行時(shí) C++ 模板庫(kù) (WRL)。我們首先定義一個(gè)非常基本的類(lèi)以封裝 XAudio 功能:

XAudioWrapper.h

#pragma once

#include "mmreg.h"
#include <vector>
#include <memory>

namespace XAudioWrapper
{
    public ref class XAudio2SoundPlayer sealed
    {
    public:
        XAudio2SoundPlayer(uint32 sampleRate);
        virtual ~XAudio2SoundPlayer();

        void Initialize();

        bool   PlaySound(size_t index);
        bool   StopSound(size_t index);
        bool   IsSoundPlaying(size_t index);
        size_t GetSoundCount();

        void Suspend();
        void Resume();

    private:
        interface IXAudio2*                     m_audioEngine;
        interface IXAudio2MasteringVoice*       m_masteringVoice;
        std::vector<std::shared_ptr<ImplData>>  m_soundList;
    };
}

首先,您必須注意類(lèi)聲明中 public、ref 和 sealed 等關(guān)鍵字的使用。對(duì)于通過(guò) JavaScript 或 C# 等其他語(yǔ)言在 Metro 風(fēng)格應(yīng)用中實(shí)例化的類(lèi)來(lái)說(shuō),該類(lèi)必須聲明為 public ref class sealed。

類(lèi)的公共功能(方法、屬性等)僅限于 C++ 內(nèi)置的類(lèi)型或 Windows 運(yùn)行時(shí)類(lèi)型。這些是可在 Windows 運(yùn)行時(shí)組件中跨越語(yǔ)言界限的唯一類(lèi)型。但話雖如此,您仍然可以將常規(guī)的 C++ 庫(kù)(即標(biāo)準(zhǔn)模板庫(kù)集合)用于您的類(lèi)中的專(zhuān)用數(shù)據(jù)成員,如在該代碼斷中所示。這些專(zhuān)用數(shù)據(jù)成員無(wú)需遵從與跨越語(yǔ)言界限有關(guān)的規(guī)則。如果您使用不支持的構(gòu)造,則 Visual Studio 編譯器將發(fā)出錯(cuò)誤消息并提供相應(yīng)的指導(dǎo)。

 

實(shí)現(xiàn)在我們的 Windows 運(yùn)行時(shí)組件中公開(kāi)的類(lèi)

現(xiàn)在,我們已定義了類(lèi)的基本接口,接下來(lái)讓我們來(lái)看看一些實(shí)現(xiàn)方法:

XAudioWrapper.cpp

XAudio2SoundPlayer::XAudio2SoundPlayer(uint32 sampleRate) :
m_soundList()
{
// Create the XAudio2 engine
UINT32 flags = 0;

XAudio2Create(&m_audioEngine, flags);

// Create the mastering voice
m_audioEngine->CreateMasteringVoice(
&m_masteringVoice,
XAUDIO2_DEFAULT_CHANNELS,
sampleRate
);
}

void XAudio2SoundPlayer::Resume()
{
m_audioEngine->StartEngine();
}

bool XAudio2SoundPlayer::PlaySound(size_t index)
{
//
// Setup buffer
//
XAUDIO2_BUFFER playBuffer = { 0 };
std::shared_ptr<ImplData> soundData = m_soundList[index];
playBuffer.AudioBytes = soundData->playData->Length;
playBuffer.pAudioData = soundData->playData->Data;
playBuffer.Flags = XAUDIO2_END_OF_STREAM;

HRESULT hr = soundData->sourceVoice->Stop();
if (SUCCEEDED(hr))
{
hr = soundData->sourceVoice->FlushSourceBuffers();
}

//
// Submit the sound buffer and (re)start (ignore any 'stop' failures)
//
hr = soundData->sourceVoice->SubmitSourceBuffer(&playBuffer);
if (SUCCEEDED(hr))
{
hr = soundData->sourceVoice->Start(0, XAUDIO2_COMMIT_NOW);
}

return SUCCEEDED(hr);
}

在該代碼段中,我們使用可用于 Metro 風(fēng)格應(yīng)用開(kāi)發(fā)的 XAudio2 COM API 來(lái)連接我們的音頻引擎、播放聲音和恢復(fù)引擎。另外,我們還可以使用 C++ 構(gòu)造和除 Windows 運(yùn)行時(shí)類(lèi)型以外的其他類(lèi)型來(lái)實(shí)現(xiàn)必要的功能。

添加和使用 Windows 運(yùn)行時(shí)組件

在定義和實(shí)現(xiàn)基本類(lèi)之后,我們使用 Visual Studio 來(lái)將 XAudioWrapper Windows 運(yùn)行時(shí)組件從我們的 C# 項(xiàng)目添加到 C++ 項(xiàng)目:

使用 Visual Studio 來(lái)將 XAudioWrapper Windows 運(yùn)行時(shí)組件的引用添加到我們的音樂(lè)應(yīng)用

圖 3:將 XAudioWrapper Windows 運(yùn)行時(shí)組件添加到我們的音樂(lè)應(yīng)用

因此,我們從 C++ 項(xiàng)目公開(kāi)的類(lèi)可用于我們的 C# 項(xiàng)目:

MainPage.cs

using XAudioWrapper;

namespace BasicSoundApp
{
public sealed partial class MainPage : Page
{
XAudio2SoundPlayer _audioPlayer = new XAudio2SoundPlayer(48000);
public MainPage()
{
this.InitializeComponent();
}

protected override void OnNavigatedTo(NavigationEventArgs e)
{
_audioPlayer.Initialize();
}

private void Button_Click_1(object sender, RoutedEventArgs e)
{
_audioPlayer.PlaySound(0);
}
}
}

如在該代碼段中所示,我們可以像使用常規(guī) .NET 組件那樣與 C# 中的 XAudio 封裝程序進(jìn)行交互。我們將引用其命名空間、舉例說(shuō)明組件并開(kāi)始調(diào)用其公開(kāi)的各種方法。所有這一切不需要任何 DllImport 來(lái)調(diào)入本機(jī)代碼!

應(yīng)用場(chǎng)景 2:使用內(nèi)置的 API 在您的應(yīng)用中打開(kāi) zip 文件

假設(shè)我們使用 HTML 來(lái)構(gòu)建文件查看器應(yīng)用,并希望添加功能來(lái)允許該應(yīng)用的用戶選取 zip 文件。我們希望將 Windows 中已內(nèi)置并在 .NET 平臺(tái)中公開(kāi)的 API 用于處理 zip 文件。

將 Windows 運(yùn)行時(shí)組件添加到我們的解決方案

該步驟與我們?cè)谝魳?lè)應(yīng)用中所描述的步驟完全相同,現(xiàn)在我們將選取 C# Windows 運(yùn)行時(shí)組件來(lái)包裝 zip 處理功能:

使用 Visual Studio 來(lái)將一個(gè)全新的 C# Windows 運(yùn)行時(shí)組件添加到我們的文件查看器應(yīng)用
圖 4:添加一個(gè)全新的 C# Windows 運(yùn)行時(shí)組件 

Visual Studio 為我們創(chuàng)建了一個(gè) C# 項(xiàng)目,用于公開(kāi) API,而 API 的實(shí)現(xiàn)和 Windows 運(yùn)行時(shí)元數(shù)據(jù)都將打包到 .winmd 文件,并且可用于我們的 Web 項(xiàng)目。


實(shí)現(xiàn)在我們的 Windows 運(yùn)行時(shí)組件中公開(kāi)的類(lèi)

我們使用 C# 來(lái)構(gòu)建將向我們的 Web 項(xiàng)目公開(kāi)的 API,但您同樣可以使用 Visual Basic。我們首先定義一個(gè)簡(jiǎn)單的 C# 類(lèi)來(lái)封裝 zip 功能:

ZipWrapper.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Threading.Tasks;
using Windows.Foundation;
using Windows.Storage;

public sealed class ZipWrapper
{
public static IAsyncOperationWithProgress<IList<string>, double> EnumerateZipFileAsync(StorageFile file)
{
return AsyncInfo.Run(async delegate(
System.Threading.CancellationToken cancellationToken, IProgress<double> progress)
{
IList<string> fileList = new List<string>();
progress.Report(0);

using (var stream = await file.OpenStreamForReadAsync())
{
using (var archive = new ZipArchive(stream))
{
for (int i = 0; i < archive.Entries.Count; i++)
{
// add code for processing/analysis on the file
// content here

// add to our list and report progress
fileList.Add(archive.Entries[i].FullName);
double progressUpdate = ((i + 1) / ((double)archive.Entries.Count)) * 100; // percentage
progress.Report(progressUpdate);
}
}
}

progress.Report(100.0);
return fileList;
});
}
}

該類(lèi)是公共的且已密封。類(lèi)似于構(gòu)建 C++ Windows 運(yùn)行時(shí)組件,這對(duì)于其他語(yǔ)言實(shí)例化類(lèi)來(lái)說(shuō)是必需的。該類(lèi)中公開(kāi)的靜態(tài)方法混合使用 Windows 運(yùn)行時(shí)類(lèi)型(例如,StorageFile),并且在方法簽名中作為 .NET 類(lèi)型(例如,IList)。我們的經(jīng)驗(yàn)法則是使用 Windows 運(yùn)行時(shí)類(lèi)型來(lái)定義向其他語(yǔ)言公開(kāi)的公共字段、參數(shù)和返回類(lèi)型。盡管如此,您仍然可以原封不動(dòng)地使用某些 .NET 基本類(lèi)型(即 DateTimeOffset 和 Uri)以及基元(即 IList)。

您還會(huì)注意到上述方法利用了在定義您的 Windows 運(yùn)行時(shí)組件時(shí)可以(且應(yīng)該)使用的用于異步性和進(jìn)度支持的 Windows 運(yùn)行時(shí)基礎(chǔ)結(jié)構(gòu)。就該類(lèi)中的 Windows 運(yùn)行時(shí)組件或任何專(zhuān)用功能的實(shí)現(xiàn)而言,您并不僅限于使用 Windows 運(yùn)行時(shí)類(lèi)型和 API;您可以自由使用任何向 Metro 應(yīng)用開(kāi)發(fā)公開(kāi)的 .NET API 表面,如代碼段 ZipArchive API 中所示。

添加和使用 Windows 運(yùn)行時(shí)組件

我們現(xiàn)在已經(jīng)實(shí)現(xiàn)了 zip 工具封裝程序,我們將使用 Visual Studio 來(lái)添加我們的 JavaScript 項(xiàng)目中對(duì) C# 項(xiàng)目的引用:

使用 Visual Studio 添加我們的文件查看器應(yīng)用中 ZipUtil Windows 運(yùn)行時(shí)組件的引用
圖 5:將 ZipUtil Windows 運(yùn)行時(shí)組件添加到我們的文件查看器應(yīng)用
 

因此,我們從 C# 項(xiàng)目公開(kāi)的類(lèi)將可用于我們的 Web 項(xiàng)目:

program.js

function pickSinglePhoto() {

// Create the picker object for picking zip files
var openPicker = new Windows.Storage.Pickers.FileOpenPicker();
openPicker.viewMode = Windows.Storage.Pickers.PickerViewMode.thumbnail;
openPicker.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.picturesLibrary;
openPicker.fileTypeFilter.replaceAll([".zip"]);

// Open the picker for the user to pick a file
openPicker.pickSingleFileAsync().then(function (file) {
if (file) {
ZipUtil.ZipWrapper.enumerateZipFileAsync(file).then(
function (fileList) {
for (var i = 0; i < fileList.length; i++)
document.getElementById('output').innerHTML += " " + fileList[i];
},
function (prog) {
document.getElementById('zipProgress').value = prog;
}
);
} else {
document.getElementById('output').innerHTML = "an error occurred";
}
});
};

正如您所看到的,我們可以與 JavaScript 中我們的 zip 工具封裝程序進(jìn)行交互,如同它是一個(gè)常規(guī)的 JavaScript 對(duì)象。我們可以調(diào)入 Windows 運(yùn)行時(shí)組件中公開(kāi)的靜態(tài)方法,而我們使用 JavaScript 的異步語(yǔ)言構(gòu)造,如 .then(),也可以完成此操作。

一般指導(dǎo)

并非您為 Metro 風(fēng)格應(yīng)用編寫(xiě)的所有 API 都應(yīng)公開(kāi)為第三方 Windows 運(yùn)行時(shí)組件。通常情況下,當(dāng)您在不同的編程語(yǔ)言之間進(jìn)行通信時(shí)需要使用 Windows 運(yùn)行時(shí)組件類(lèi)型,并使用語(yǔ)言中內(nèi)置的類(lèi)型和構(gòu)造來(lái)實(shí)現(xiàn)無(wú)法通過(guò) Windows 運(yùn)行時(shí)組件全局公開(kāi)的功能。另外,跨越語(yǔ)言界限還涉及各種語(yǔ)言特定的功能和規(guī)則,當(dāng)構(gòu)建 Windows 運(yùn)行時(shí)組件時(shí),您必須將其納入考慮范圍。它們具體包括代理和事件、異步操作、方法重載和處理特定的數(shù)據(jù)類(lèi)型(例如,集合、異常處理和調(diào)試技巧)。您可以通過(guò)訪問(wèn)構(gòu)建 Windows 運(yùn)行時(shí)組件中面向您的開(kāi)發(fā)語(yǔ)言的部分,來(lái)深入研究這些主題。

總結(jié)

就 Windows 運(yùn)行時(shí)組件而言,您現(xiàn)在可以混合使用編寫(xiě)語(yǔ)言和 API 技術(shù)來(lái)構(gòu)建您設(shè)想的應(yīng)用。毫不遷就的理念貫穿于 Windows 8。即使是在開(kāi)發(fā)階段情況依然如此,我們?cè)试S您混合使用和匹配適用于您的方案的最佳編程語(yǔ)言。我希望這將使您能夠用更多的時(shí)間來(lái)考慮創(chuàng)新,而不是在學(xué)習(xí)全新的編程語(yǔ)言方面浪費(fèi)大量的時(shí)間。

希望您能充分享受構(gòu)建應(yīng)用為您帶來(lái)的快樂(lè)!

-- Windows 項(xiàng)目經(jīng)理 Ines Khelifi


posted on 2012-10-29 21:16 jackdong 閱讀(331) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): Windows RT
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲美女视频| 老司机精品视频网站| 欧美一区二区精品久久911| 亚洲毛片在线| 一区二区三区精品国产| 一区二区三区 在线观看视| 99亚洲伊人久久精品影院红桃| 亚洲国产精品一区二区三区| 亚洲国产高清自拍| 亚洲伦理中文字幕| 亚洲欧美成人网| 久久精品女人天堂| 欧美顶级艳妇交换群宴| 亚洲国产欧美在线| 欧美福利在线观看| 一区二区三区欧美在线| 午夜精品亚洲一区二区三区嫩草| 久久久久www| 欧美激情视频网站| 国产精品www994| 精东粉嫩av免费一区二区三区| 亚洲精品乱码视频 | 亚洲人在线视频| 亚洲图片欧美一区| 裸体歌舞表演一区二区| 亚洲美女黄色片| 欧美影片第一页| 欧美日韩国产色站一区二区三区| 国产午夜精品福利| 一区二区三区欧美视频| 久久久久国内| 日韩亚洲在线| 久久精品国产免费观看| 亚洲国产电影| 欧美国产欧美亚洲国产日韩mv天天看完整 | 伊人久久亚洲美女图片| 亚洲精品国产系列| 香蕉成人伊视频在线观看| 欧美国产在线观看| 午夜一区二区三区不卡视频| 欧美精品v日韩精品v韩国精品v | 欧美韩国日本综合| 午夜精品在线视频| 国产精品yjizz| 日韩一二三区视频| 欧美高清视频| 久久久久久婷| 激情校园亚洲| 久久久久久综合| 亚洲欧美怡红院| 国产精品久在线观看| 一区二区日韩精品| 亚洲国产美女精品久久久久∴| 欧美综合77777色婷婷| 国产乱码精品一区二区三区忘忧草 | 久久色在线观看| 国户精品久久久久久久久久久不卡 | 日韩视频一区二区三区在线播放免费观看 | 亚洲美女一区| 欧美国产第一页| 久久免费视频一区| 在线观看成人一级片| 久久一日本道色综合久久| 欧美在线啊v| 国内久久婷婷综合| 久久影视精品| 久色成人在线| 亚洲区欧美区| 亚洲国产一区在线| 欧美日韩国产在线播放| 欧美在线不卡| 香蕉国产精品偷在线观看不卡| 国产精品久久久久久久久久久久| 亚洲一区二区三区午夜| 一区二区三区高清在线| 国产精品99免费看 | 亚洲一区二区三区四区视频| 99在线热播精品免费99热| 国产精品v日韩精品| 久久精品国产77777蜜臀| 欧美亚洲免费| 亚洲国产高清在线| 亚洲乱亚洲高清| 国产精品试看| 久久手机精品视频| 欧美大片在线看免费观看| 亚洲色图在线视频| 欧美一区二区在线免费播放| 一区二区自拍| 99在线精品免费视频九九视| 国内成+人亚洲| 欧美成熟视频| 国产精品青草久久| 免费国产一区二区| 欧美激情第二页| 香蕉免费一区二区三区在线观看 | 国产精品你懂的| 久久爱91午夜羞羞| 欧美华人在线视频| 国产精品99久久久久久久久| 在线亚洲精品| 亚洲国产一区二区视频| 亚洲精品亚洲人成人网| 国产乱肥老妇国产一区二| 欧美福利一区| 国产精品盗摄久久久| 久久综合九色| 欧美婷婷久久| 猫咪成人在线观看| 国产精品国产三级国产专区53| 久久综合给合久久狠狠狠97色69| 欧美日韩岛国| 欧美黑人在线观看| 国产麻豆91精品| 亚洲精品1区2区| 狠狠色伊人亚洲综合网站色| 一区二区三区四区五区精品| 亚洲国产欧洲综合997久久| 亚洲欧美另类在线观看| 99re6热在线精品视频播放速度 | 午夜在线精品| 亚洲手机视频| 欧美成人激情视频免费观看| 亚洲欧美在线免费观看| 裸体一区二区三区| 久久精品久久99精品久久| 一本一本久久a久久精品综合妖精| 欧美一区二区三区免费观看| 亚洲无限av看| 欧美激情片在线观看| 免费成人小视频| 国产亚洲欧洲一区高清在线观看 | 久久久久欧美精品| 久久精品亚洲一区二区| 国产精品欧美一区二区三区奶水| 9l视频自拍蝌蚪9l视频成人 | 欧美v亚洲v综合ⅴ国产v| 国产在线乱码一区二区三区| 欧美一级一区| 久久久久九九视频| 激情视频一区| 麻豆精品传媒视频| 欧美激情第4页| 亚洲精品久久久久久久久| 欧美成人精品不卡视频在线观看| 欧美成人免费全部观看天天性色| 在线日韩av片| 欧美大片免费观看在线观看网站推荐| 欧美高清视频www夜色资源网| 亚洲欧洲在线一区| 欧美精品一区二区三区视频| 亚洲久久一区二区| 亚洲综合欧美日韩| 国产专区综合网| 久久综合给合久久狠狠色 | 亚洲精品在线电影| 亚洲午夜一区| 国产日韩欧美精品综合| 久久精品成人| 亚洲国产裸拍裸体视频在线观看乱了中文 | 一二三区精品福利视频| 亚洲欧美伊人| 韩日欧美一区二区| 免费不卡中文字幕视频| 日韩午夜免费| 欧美亚洲三级| 在线日韩一区二区| 欧美日韩一区二区三区在线观看免| 亚洲午夜精品福利| 欧美不卡高清| 亚洲影视在线| 在线看无码的免费网站| 欧美日韩午夜剧场| 久久精品国产精品亚洲| 亚洲美女电影在线| 另类国产ts人妖高潮视频| 一本色道久久99精品综合| 国产三区二区一区久久| 免费成人黄色| 性色av一区二区怡红| 欧美韩日一区二区| 欧美影院在线| 一区二区冒白浆视频| 黑人中文字幕一区二区三区| 午夜精品视频| 在线不卡中文字幕| 久久久久久穴| 99在线热播精品免费99热| 美女视频黄免费的久久| 亚洲视频久久| 亚洲国产精品久久久久秋霞影院| 国产精品国产自产拍高清av王其| 久久免费高清视频| 欧美在线观看网址综合| 一区二区欧美视频| 亚洲黄色小视频| 免费亚洲电影在线| 久久久蜜桃一区二区人| 欧美永久精品| 亚洲欧美国产精品va在线观看|