다음을 통해 공유


win32 앱에서 피드 공급자 구현(C++/WinRT)

참고

일부 정보는 상업용으로 출시되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적, 또는 묵시적인 보증을 하지 않습니다.

이 문서에서는 피드 콘텐츠 URI를 등록하고 IFeedProvider 인터페이스를 구현하는 간단한 피드 공급자를 만드는 방법에 대해 설명합니다. 이 인터페이스의 메서드는 위젯 보드에서 사용자 지정 쿼리 문자열 매개변수를 요청하기 위해 호출되며, 일반적으로 인증 시나리오를 지원하기 위해 호출됩니다. 피드 공급자는 단일 피드 또는 여러 피드를 지원할 수 있습니다.

C++/WinRT를 사용하여 피드 공급자를 구현하려면 C# Windows 앱에서 피드 공급자 구현(C++/WinRT)을 참조하세요.

필수 조건

  • 디바이스에 개발자 모드가 설정되어 있어야 합니다. 자세한 내용은 개발자를 위한 설정을 참조하세요.
  • WinUI 애플리케이션 개발 워크로드가 있는 Visual Studio 2026 이상. 선택적 드롭다운에서 C++(v143)에 대한 구성 요소를 추가해야 합니다.

새 C++/WinRT win32 콘솔 앱을 만듭니다.

Visual Studio에서 새 프로젝트를 만듭니다. 새 프로젝트 만들기 대화 상자에서 언어 필터를 "C++"로 설정하고 플랫폼 필터를 Windows로 설정한 다음, Windows 콘솔 애플리케이션(C++/WinRT) 프로젝트 템플릿을 선택합니다. 새 프로젝트의 이름을 "ExampleFeedProvider"로 지정합니다. 이 연습에서는 솔루션 및 프로젝트를 같은 디렉터리에 배치 옵션의 선택을 해제해야 합니다. 메시지가 표시되면 앱의 대상 Windows 버전을 10.022631.2787 이상으로 설정합니다.

Windows 앱 SDK 및 Windows 구현 라이브러리 NuGet 패키지에 대한 참조 추가

이 샘플에서는 안정적인 최신 Windows 앱 SDK NuGet 패키지를 사용합니다. 솔루션 탐색기에서 참조를 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 관리를 선택합니다. NuGet 패키지 관리자에서 찾아보기 탭을 선택하고 "Microsoft.WindowsAppSDK"를 검색합니다. 버전 드롭다운에서 안정적인 최신 버전을 선택한 다음 설치를 클릭합니다.

이 샘플에서는 Windows 구현 라이브러리 NuGet 패키지도 사용합니다. 솔루션 탐색기에서 참조를 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 관리를 선택합니다. NuGet 패키지 관리자에서 찾아보기 탭을 선택하고 "Microsoft.Windows.ImplementationLibrary"를 검색합니다. 버전 드롭다운에서 최신 버전을 선택한 다음 설치를 클릭합니다.

미리 컴파일된 헤더 파일 pch.h에서 다음 include 지시문을 추가합니다.

//pch.h 
#pragma once
#include <wil/cppwinrt.h>
#include <wil/resource.h>
...
#include <winrt/Microsoft.Windows.Widgets.Providers.h>

참고

WinRT 헤더 앞에 wil/cppwinrt.h 헤더를 먼저 포함해야 합니다.

피드 공급자 앱 종료를 올바르게 처리하려면 winrt::get_module_lock 사용자 지정 구현이 필요합니다. 기본.cpp 파일에 정의되고 앱을 종료하도록 알리는 이벤트를 설정하는 SignalLocalServerShutdown 메서드를 미리 선언합니다. pch.h 파일에서 #pragma once 지시문 바로 아래에 다음 코드를 추가하고, 다른 포함 지시문들보다 먼저 추가합니다.

//pch.h
#include <stdint.h>
#include <combaseapi.h>

// In .exe local servers the class object must not contribute to the module ref count, and use
// winrt::no_module_lock, the other objects must and this is the hook into the C++ WinRT ref counting system
// that enables this.
void SignalLocalServerShutdown();

namespace winrt
{
    inline auto get_module_lock() noexcept
    {
        struct service_lock
        {
            uint32_t operator++() noexcept
            {
                return ::CoAddRefServerProcess();
            }

            uint32_t operator--() noexcept
            {
                const auto ref = ::CoReleaseServerProcess();

                if (ref == 0)
                {
                    SignalLocalServerShutdown();
                }
                return ref;
            }
        };

        return service_lock{};
    }
}


#define WINRT_CUSTOM_MODULE_LOCK

피드 작업을 처리하는 FeedProvider 클래스 추가

Visual Studio에서 솔루션 탐색기ExampleFeedProvider 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 추가->클래스를 선택합니다. 클래스 추가 대화 상자에서 클래스 이름을 "FeedProvider"로 지정하고 추가를 클릭합니다.

IFeedProvider 인터페이스를 구현하는 클래스 선언

IFeedProvider 인터페이스는 위젯 보드가 피드 공급자를 사용하여 작업을 시작하기 위해 호출하는 메서드를 정의합니다. FeedProvider.h 파일의 빈 클래스 정의를 다음 코드로 바꿉다. 이 코드는 IFeedProvider 인터페이스를 구현하는 구조를 선언하고 인터페이스 메서드에 대한 프로토타입을 선언합니다.

// FeedProvider.h
#pragma once
struct FeedProvider : winrt::implements<FeedProvider, winrt::Microsoft::Windows::Widgets::Feeds::Providers::IFeedProvider>
{
    FeedProvider() {}

    /* IFeedrovider required functions that need to be implemented */
    void OnFeedProviderEnabled(winrt::Microsoft::Windows::Widgets::Feeds::Providers::FeedProviderEnabledArgs args);
    void OnFeedProviderDisabled(winrt::Microsoft::Windows::Widgets::Feeds::Providers::FeedProviderDisabledArgs args);
    void OnFeedEnabled(winrt::Microsoft::Windows::Widgets::Feeds::Providers::FeedEnabledArgs args);
    void OnFeedDisabled(winrt::Microsoft::Windows::Widgets::Feeds::Providers::FeedDisabledArgs args);
    void OnCustomQueryParametersRequested(winrt::Microsoft::Windows::Widgets::Feeds::Providers::CustomQueryParametersRequestedArgs args);
    /* IFeedProvider required functions that need to be implemented */

};

IFeedProvider 메서드 구현

다음 몇 섹션에서는 IFeedProvider 인터페이스의 메서드를 구현합니다. 인터페이스 메서드로 전환하기 전에 다음 줄을 include 지시문 다음 FeedProvider.cpp에 추가하여 피드 공급자 API를 winrt 네임스페이스로 끌어오고 이전 단계에서 선언한 맵에 대한 액세스를 허용합니다.

참고

IFeedProvider 인터페이스의 콜백 메서드에 전달된 개체는 콜백 내에서만 유효합니다. 콜백 컨텍스트 외부의 동작이 정의되지 않았으므로 이러한 개체에 대한 참조를 저장해서는 안 됩니다.

// WidgetProvider.cpp
namespace winrt
{
    using namespace Microsoft::Windows::Widgets::Feeds::Providers;
}

온피드프로바이더활성화

OnFeedProviderEnabled 메서드는 위젯 보드 호스트에서 공급자와 연결된 피드를 만들 때 호출됩니다. 이 메서드의 구현에서 필요한 인증 토큰을 포함하여 피드 콘텐츠를 제공하는 URL에 전달될 매개 변수를 사용하여 쿼리 문자열을 생성합니다. 사용하도록 설정된 피드와 쿼리 문자열을 식별하는 이벤트 인수에서 FeedProviderDefinitionId를 전달하여 CustomQueryParametersUpdateOptions 인스턴스를 만듭니다. 기본 FeedManager를 가져오고 SetCustomQueryParameters를 호출하여 위젯 보드에 쿼리 문자열 매개 변수를 등록합니다.

// FeedProvider.cs
void FeedProvider::OnFeedProviderEnabled(winrt::Microsoft::Windows::Widgets::Feeds::Providers::FeedProviderEnabledArgs args)
{
    std::wstringstream wstringstream;
wstringstream << args.FeedProviderDefinitionId().c_str() << L" feed provider was enabled." << std::endl;
    _putws(wstringstream.str().c_str());

    auto updateOptions = winrt::CustomQueryParametersUpdateOptions(args.FeedProviderDefinitionId(), L"param1&param2");
    winrt::FeedManager::GetDefault().SetCustomQueryParameters(updateOptions);
}

OnFeedProviderDisabled (피드 제공자가 비활성화됨)

OnFeedProviderDisabled는 이 공급자에 대한 모든 피드를 사용하지 않도록 설정한 경우 위젯 보드에서 호출됩니다. 피드 공급자는 이러한 메서드 호출에 대한 응답으로 작업을 수행할 필요가 없습니다. 필요한 경우 메서드 호출을 원격 분석 목적으로 사용하거나 쿼리 문자열 매개 변수를 업데이트하거나 인증 토큰을 해지하는 데 사용할 수 있습니다. 앱이 단일 피드 공급자만 지원하거나 앱에서 지원하는 모든 피드 공급자를 사용하지 않도록 설정한 경우, 이 콜백에 대한 응답으로 앱이 종료될 수 있습니다.

// FeedProvider.cs

void FeedProvider::OnFeedProviderDisabled(winrt::Microsoft::Windows::Widgets::Feeds::Providers::FeedProviderDisabledArgs args)
{
    std::wstringstream wstringstream;
    wstringstream << args.FeedProviderDefinitionId().c_str() << L" feed provider was disabled." << std::endl;
    _putws(wstringstream.str().c_str());
}

OnFeedEnabled(피드 활성화), OnFeedDisabled(피드 비활성화)

피드를 사용하거나 사용하지 않도록 설정하면 위젯 보드에서 OnFeedEnabledOnFeedDisabled를 호출합니다. 피드 공급자는 이러한 메서드 호출에 대한 응답으로 작업을 수행할 필요가 없습니다. 필요한 경우 메서드 호출을 원격 분석 목적으로 사용하거나 쿼리 문자열 매개 변수를 업데이트하거나 인증 토큰을 해지하는 데 사용할 수 있습니다.

// FeedProvider.cs

void FeedProvider::OnFeedEnabled(winrt::Microsoft::Windows::Widgets::Feeds::Providers::FeedEnabledArgs args)
{
    std::wstringstream wstringstream;
    wstringstream << args.FeedDefinitionId().c_str() << L" feed was enabled." << std::endl;
    _putws(wstringstream.str().c_str());
}
// FeedProvider.cs

void FeedProvider::OnFeedDisabled(winrt::Microsoft::Windows::Widgets::Feeds::Providers::FeedDisabledArgs args)
{
    std::wstringstream wstringstream;
    wstringstream << args.FeedDefinitionId().c_str() << L" feed was disabled." << std::endl;
    _putws(wstringstream.str().c_str());
}

사용자 지정 쿼리 매개변수 요청 중

위젯 보드에서 피드 공급자와 연결된 사용자 지정 쿼리 매개 변수를 새로 고쳐야 한다고 판단하면 OnCustomQueryParametersRequested가 발생합니다. 예를 들어 원격 웹 서비스에서 피드 콘텐츠를 가져오는 작업이 실패하면 이 메서드가 발생할 수 있습니다. 이 메서드에 전달된 CustomQueryParametersRequestedArgsFeedProviderDefinitionId 속성은 쿼리 문자열 매개 변수가 요청되는 피드를 지정합니다. 공급자는 SetCustomQueryParameters를 호출하여 쿼리 문자열을 다시 생성하고 위젯 보드에 다시 전달해야 합니다.

// FeedProvider.cs

void FeedProvider::OnCustomQueryParametersRequested(winrt::Microsoft::Windows::Widgets::Feeds::Providers::CustomQueryParametersRequestedArgs args)
{
    std::wstringstream wstringstream;
    wstringstream << L"CustomQueryParameters were requested for " << args.FeedProviderDefinitionId().c_str() << std::endl;
    _putws(wstringstream.str().c_str());

    auto updateOptions = winrt::CustomQueryParametersUpdateOptions(args.FeedProviderDefinitionId(), L"param1&param2");
    winrt::FeedManager::GetDefault().SetCustomQueryParameters(updateOptions);
}

요청에 따라 FeedProvider를 인스턴스화하는 클래스 팩터리 등록

FeedProvider 클래스를 정의하는 헤더를 앱의 main.cpp 파일의 맨 위에 있는 포함 항목에 추가합니다. 우리는 또한 여기에 뮤텍스를 포함할 것입니다.

// main.cpp
...
#include "FeedProvider.h"
#include <mutex>

종료할 앱을 트리거하는 이벤트와 이벤트를 설정할 SignalLocalServerShutdown 함수를 선언합니다. 다음 코드를 main.cpp에 붙여넣습니다.

// main.cpp
wil::unique_event g_shudownEvent(wil::EventOptions::None);

void SignalLocalServerShutdown()
{
    g_shudownEvent.SetEvent();
}

다음으로 COM 활성화를 위해 피드 공급자를 식별하는 데 사용할 CLSID를 만들어야 합니다. 도구 >만들기 GUID로 이동하여 Visual Studio에서 GUID를 생성합니다. "static const GUID =" 옵션을 선택하고 복사를 클릭한 다음 main.cpp에 붙여넣습니다. GUID 정의를 다음 C++/WinRT 구문으로 업데이트하고 GUID 변수 이름을 feed_provider_clsid로 설정합니다. 나중에 앱을 패키징할 때 이 형식이 필요하므로 주석 처리된 버전의 GUID를 그대로 둡니다.

// main.cpp
...
// {80F4CB41-5758-4493-9180-4FB8D480E3F5}
static constexpr GUID feed_provider_clsid
{
    0x80f4cb41, 0x5758, 0x4493, { 0x91, 0x80, 0x4f, 0xb8, 0xd4, 0x80, 0xe3, 0xf5 }
};

다음 클래스 팩토리 정의를 main.cpp에 추가합니다. 이는 주로 공급 공급자 구현과 관련이 없는 상용구 코드입니다. CoWaitForMultipleObjects는 앱이 종료되기 전에 종료 이벤트가 트리거될 때까지 기다립니다.

// main.cpp
template <typename T>
struct SingletonClassFactory : winrt::implements<SingletonClassFactory<T>, IClassFactory>
{
    STDMETHODIMP CreateInstance(
        ::IUnknown* outer,
        GUID const& iid,
        void** result) noexcept final
    {
        *result = nullptr;

        std::unique_lock lock(mutex);

        if (outer)
        {
            return CLASS_E_NOAGGREGATION;
        }

        if (!instance)
        {
            instance = winrt::make<FeedProvider>();
        }

        return instance.as(iid, result);
    }

    STDMETHODIMP LockServer(BOOL) noexcept final
    {
        return S_OK;
    }

private:
    T instance{ nullptr };
    std::mutex mutex;
};

int main()
{
    winrt::init_apartment();
    wil::unique_com_class_object_cookie feedProviderFactory;
    auto factory = winrt::make<SingletonClassFactory<winrt::Microsoft::Windows::Widgets::Feeds::Providers::IFeedProvider>>();

    winrt::check_hresult(CoRegisterClassObject(
        feed_provider_clsid,
        factory.get(),
        CLSCTX_LOCAL_SERVER,
        REGCLS_MULTIPLEUSE,
        feedProviderFactory.put()));

    DWORD index{};
    HANDLE events[] = { g_shudownEvent.get() };
    winrt::check_hresult(CoWaitForMultipleObjects(CWMO_DISPATCH_CALLS | CWMO_DISPATCH_WINDOW_MESSAGES,
        INFINITE,
        static_cast<ULONG>(std::size(events)), events, &index));

    return 0;
}

피드 공급자 앱 패키지

현재 릴리스에서는 패키지된 앱만 피드 공급자로 등록할 수 있습니다. 다음 단계에서는 앱을 패키징하고 앱 매니페스트를 업데이트하여 OS에 피드 공급자로 앱을 등록하는 과정을 안내합니다.

MSIX 패키징 프로젝트 만들기

솔루션 탐색기에서 솔루션을 마우스 오른쪽 단추로 클릭하고 새 프로젝트 >추가를 선택합니다. 새 프로젝트 추가 대화 상자에서 "Windows 애플리케이션 패키징 프로젝트" 템플릿을 선택하고 다음을 클릭합니다. 프로젝트 이름을 "ExampleFeedProviderPackage"로 설정하고 만들기를 클릭합니다. 메시지가 표시되면 대상 버전을 버전 1809 이상으로 설정하고 확인을 클릭합니다. 그런 다음, ExampleFeedProviderPackage 프로젝트를 마우스 오른쪽 단추로 클릭하고 >프로젝트 참조 추가를 선택합니다. ExampleFeedProvider 프로젝트를 선택하고 확인을 클릭합니다.

패키징 프로젝트에 Windows 앱 SDK 패키지 참조를 추가합니다.

MSIX 패키징 프로젝트에 Windows 앱 SDK nuget 패키지에 대한 참조를 추가해야 합니다. 솔루션 탐색기에서 ExampleFeedProviderPackage 프로젝트를 두 번 클릭하여 ExampleFeedProviderPackage.wapproj 파일을 엽니다. 프로젝트 요소 내에 다음 xml을 추가합니다.

<!--ExampleFeedProviderPackage.wapproj-->
<ItemGroup>
    <PackageReference Include="Microsoft.WindowsAppSDK" Version="1.5.231116003-experimentalpr">
        <IncludeAssets>build</IncludeAssets>
    </PackageReference>  
</ItemGroup>

참고

PackageReference 요소에 지정된 버전이 이전 단계에서 참조한 안정적인 최신 버전과 일치하는지 확인합니다.

올바른 버전의 Windows 앱 SDK 이미 컴퓨터에 설치되어 있고 패키지에서 SDK 런타임을 번들로 묶지 않으려는 경우 ExampleFeedProviderPackage 프로젝트에 대한 Package.appxmanifest 파일에서 패키지 종속성을 지정할 수 있습니다.

<!--Package.appxmanifest-->
...
<Dependencies>
...
    <PackageDependency Name="Microsoft.WindowsAppRuntime.1.5.233430000-experimental1" MinVersion="2000.638.7.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" />
...
</Dependencies>
...

패키지 매니페스트 업데이트하기

솔루션 탐색기에서 Package.appxmanifest 파일을 마우스 오른쪽 단추로 클릭하고 코드 보기를 선택하여 매니페스트 xml 파일을 엽니다. 다음으로 사용할 앱 패키지 확장에 대한 일부 네임스페이스 선언을 추가해야 합니다. 최상위 패키지 요소에 다음 네임스페이스 정의를 추가합니다.

<!-- Package.appmanifest -->
<Package
  ...
  xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
  xmlns:com="http://schemas.microsoft.com/appx/manifest/com/windows10"

애플리케이션 요소 내에서 Extensions라는 새 빈 요소를 만듭니다. uap:VisualElements에 대한 닫는 태그 후에 오는지 확인합니다.

<!-- Package.appxmanifest -->
<Application>
...
    <Extensions>

    </Extensions>
</Application>

추가해야 하는 첫 번째 확장은 ComServer 확장입니다. 그러면 실행 파일의 진입점이 OS에 등록됩니다. 이 확장은 레지스트리 키를 설정하여 COM 서버를 등록하는 것과 동일한 패키지된 앱이며 피드 공급자와 관련이 없습니다. 다음 com:Extension 요소를 확장 요소의 자식으로 추가합니다. com:Class 요소의 ID 특성에서 GUID를 이전 단계에서 생성한 GUID로 변경합니다.

<!-- Package.appxmanifest -->
<Extensions>
    <com:Extension Category="windows.comServer">
        <com:ComServer>
            <com:ExeServer Executable="ExampleFeedProvider\ExampleFeedProvider.exe" Arguments="-RegisterProcessAsComServer" DisplayName="C++ Feed Provider App">
                <com:Class Id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" DisplayName="FeedProvider" />
            </com:ExeServer>
        </com:ComServer>
    </com:Extension>
</Extensions>

다음으로, 앱을 피드 공급자로 등록하는 확장을 추가합니다. 다음 코드 조각에 uap3:Extension 요소를 확장 요소의 자식으로 붙여넣습니다. COM 요소의 ClassId 특성을 이전 단계에서 사용한 GUID로 바꿔야 합니다.

<!-- Package.appxmanifest -->
<Extensions>
    ...
    <uap3:Extension Category="windows.appExtension">
        <uap3:AppExtension Name="com.microsoft.windows.widgets.feeds" DisplayName="ContosoFeed" Id="com.examplewidgets.examplefeed" PublicFolder="Public">
            <uap3:Properties>
                <FeedProvider Icon="ms-appx:Assets\StoreLogo.png" Description="FeedDescription">
                    <Activation>
                        <!-- Apps exports COM interface which implements IFeedProvider -->
                        <CreateInstance ClassId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" />
                    </Activation>
                    <Definitions>
                        <Definition Id="Contoso_Feed"
                            DisplayName="Contoso_Feed Feed"
                            Description="Feed representing Contoso"
                            ContentUri="https://www.contoso.com/"
                            Icon="ms-appx:Images\StoreLogo.png">
                        </Definition>
                        <Definition Id="Fabrikam_Feed"
                            DisplayName="Fabrikam Feed"
                            Description="Feed representing Example"
                            ContentUri="https://www.fabrikam.com/"
                            Icon="ms-appx:Images\StoreLogo.png">
                        </Definition>
                    </Definitions>
                </FeedProvider>
            </uap3:Properties>
        </uap3:AppExtension>
    </uap3:Extension>
</Extensions>

이러한 모든 요소에 대한 자세한 설명 및 형식 정보는 피드 공급자 패키지 매니페스트 XML 형식을 참조 하세요.

패키징 프로젝트에 아이콘 추가

솔루션 탐색기에서 ExampleFeedProviderPackage를 마우스 오른쪽 단추로 클릭하고 추가->새 폴더를 선택합니다. 이전 단계의 Package.appxmanifest에서 사용한 대로 이 폴더의 이름을 ProviderAssets로 지정합니다. 여기서는 피드에 대한 아이콘을 저장합니다. 원하는 아이콘을 추가한 후, 이미지 이름이 Path=ProviderAssets\ 다음에 오는 것과 일치하는지 확인하십시오. 일치하지 않으면 피드가 위젯 보드에 나타나지 않습니다.

피드 공급자 테스트

솔루션 플랫폼 드롭다운에서 개발 머신과 일치하는 아키텍처(예: "x64")를 선택했는지 확인합니다. 솔루션 탐색기에서 솔루션을 마우스 오른쪽 단추로 클릭하고 솔루션 빌드를 선택합니다. 이 작업이 완료되면 ExampleWidgetProviderPackage를 마우스 오른쪽 단추로 클릭하고 배포를 선택합니다. 콘솔 앱은 배포 시 시작되어야 하며, 콘솔 출력에서 피드가 사용하도록 설정된 것을 볼 수 있습니다. 위젯 보드를 열면 피드 섹션의 위쪽에 있는 탭에 새 피드가 표시됩니다.

피드 공급자 디버깅

피드를 고정한 후 위젯 플랫폼은 피드에 대한 관련 정보를 수신하고 보내기 위해 피드 공급자 애플리케이션을 시작합니다. 실행 중인 피드를 디버그하려면 실행 중인 피드 공급자 애플리케이션에 디버거를 연결하거나 시작되면 피드 공급자 프로세스 디버깅을 자동으로 시작하도록 Visual Studio를 설정할 수 있습니다.

실행 중인 프로세스에 연결하려면 다음을 수행합니다.

  1. Visual Studio에서 Debug ->프로세스에 연결을 클릭합니다.
  2. 프로세스를 필터링하고 원하는 피드 공급자 애플리케이션을 찾습니다.
  3. 디버거를 연결합니다.

디버거가 처음 시작될 때 프로세스에 자동으로 연결하려면 다음을 수행합니다.

  1. Visual Studio에서 디버그->기타 디버그 대상->설치된 앱 패키지 디버그를 차례로 선택합니다.
  2. 패키지를 필터링하고 원하는 피드 공급자 패키지를 찾습니다.
  3. 선택하고 "시작하지 않음, 시작 시 코드 디버그"라고 적힌 상자를 체크합니다.
  4. 첨부를 클릭합니다.

콘솔 앱을 Windows 앱으로 변환

이 연습에서 만든 콘솔 앱을 Windows 앱으로 변환하려면 다음을 수행합니다.

  1. 솔루션 탐색기에서 ExampleWidgetProvider 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 링커 - >시스템으로 이동하고 하위 시스템을 "콘솔"에서 "Windows"로 변경합니다. 이 작업은 <링크>..</링크> 섹션에 <서브시스템>Windows</서브시스템>을 .vcxproj 파일에 추가하여 수행할 수도 있습니다.
  2. 기본.cpp에서 int main()int WINAPI wWinMain(_In_ HINSTANCE /*hInstance*/, _In_opt_ HINSTANCE /*hPrevInstance*/, _In_ PWSTR pCmdLine, _In_ int /*nCmdShow*/)로 바꾸세요.

출력 형식이 Windows 애플리케이션으로 설정된 C++ 피드 공급자 프로젝트 속성을 보여주는 스크린샷

피드 공급자 앱 게시

피드 공급자를 개발하고 테스트한 후에는 사용자가 자신의 장치에 피드를 설치하려면 Microsoft Store에 앱을 게시할 수 있습니다. 앱을 게시하기 위한 단계별 지침은 Microsoft Store에서 앱 게시를 참조하세요.

피드 저장소 모음

앱이 Microsoft Store에 게시된 후 사용자가 Windows 피드를 특징으로 하는 앱을 검색하는 데 도움이 되는 피드 스토어 컬렉션에 앱을 포함하도록 요청할 수 있습니다. 요청을 제출하려면 피드/보드를 스토어 컬렉션에 추가하기 위해 제출하는 방법 을 참조하세요.