2016-08-16 2 views
0

일부 .cur 파일이 DLL 파일에 포함되어 있으며이를 UWP C++ 프로젝트에서로드하여 사용하고 싶습니다. 가능한가요?UWP의 dll에서 리소스를로드하는 방법은 무엇입니까?

Win32에서 LoadImage 또는 LoadCursor를 사용할 수 있지만 해당 API는 UWP에 사용할 수 없다는 것을 알고 있습니다. LoadPackagedLibrary를 사용하여 DLL을로드 할 수는 있지만 커서를 가져 오는 방법은 알 수 없습니다.

+0

UWP 캔트 사용는 Win32 DLL – lindexi

+0

내가 그건 당신이 무엇을 의미하는지 경우 자원을 포함하는 UWP DLL을 만들 수 있습니까? – mnovakovic

답변

0

이 작업을 수행 할 수 CoreCursor API를 사용할 수 있습니다 : 여기

template <typename T> 
HRESULT RestoreCursor(T* cursorOwner, uint32_t resourceId) 
{ 
    using namespace ABI::Windows::UI::Core; 
    using namespace Microsoft::WRL; 
    using namespace Microsoft::WRL::Wrappers; 

    ComPtr<ICoreCursorFactory> cursorFactory; 
    hr = RoGetActivationFactory(HStringReference(L"Windows.UI.Core.CoreCursor").Get(), __uuidof(ICoreCursorFactory), &cursorFactory); 
    if (FAILED(hr)) return hr; 

    ComPtr<ICoreCursor> cursor; 
    hr = cursorFactory->CreateCursor(CoreCursorType_Arrow, resourceId, &cursor); 
    if (FAILED(hr)) return hr; 

    return cursorOwner->put_PointerCursor(cursor.Get()); 
} 

T는 XAML을 사용하거나하지 않는 여부에 따라 ICorePointerInputSource (CoreIndependentInputSource 등) 또는 ICoreWindow 일 수있다.

리소스를 DLL에 포함 할 수 있는지 또는 .exe 자체에 포함해야하는지 여부는 100 % 확실하지 않습니다.

+0

ICoreCursorFactory와 RoGetActivationFactory를 사용하는 것이 좋습니다. 나는 그것들이 바뀔 수 있고 아마 너무 휴대 가능/안전하지 않은 개인용 API라고 생각한다. – mnovakovic

+0

이러한 API는 비공개 API가 아닙니다. 그들은 공개적으로 사용하기에 완벽하게 안전합니다. 사실, 그게 C++/CX와.NET은 커버 뒤에 있습니다. – Sunius

2

DLL 파일에 일부 .cur 파일이 포함되어 있으며이를 UWP C++ 프로젝트에로드하고 사용하고 싶습니다. 가능한가요?

내 경험에 의하면 현재 불가능합니다. 여기 내 설명은 다음과 같습니다

article는 UWP 응용 프로그램에 대한 오래된 :

사용자 지정 설정 .CUR 파일을 사용하여 커서하는 방법에 대한

하기 전에, 몇 가지 논의가있다 하지만 생각은 같습니다. 네이티브 리소스 라이브러리에 사용자 정의 커서를 정의하고 CoreWindow.PointerCursor 속성을 사용하여 커서를 설정합니다.

, 기사에서 사용자 정의 커서를 부분 만들기를 참조하십시오 6,

우리는 DLL에서 사용자 정의 커서 (범용 윈도우) 프로젝트, 대부분의 단계는 동일을 만들어야합니다. 나는에 리소스 파일을 패키지로 시도했습니다

Windows::UI::Core::CoreCursorType cursorType = Windows::UI::Core::CoreCursorType::Custom; 
CoreCursor ^* theCursor = new CoreCursor^(nullptr); 
*theCursor = ref new CoreCursor(cursorType, 101); //101 is the resource id number 
CoreWindow::GetForCurrentThread()->PointerCursor = *theCursor; 

enter image description here

:

그런 다음 사용자 정의 커서를 설정하려면 다음 코드를 사용하여, 우리의 파일을 C++ UWP 응용 프로그램 .RC 기존 항목을 추가 Windows 런타임 구성은 참조로 추가되었지만 리소스를 올바르게 인식 할 수 없습니다.

그래서 우리는 특별한 요구 사항에 대한 우리의 uwp 응용 프로그램에 리소스를 통합해야합니다.

내 샘플을 참조하십시오 https://github.com/Myfreedom614/UWP-Samples/tree/master/UWPCreateCurCPPAPP1/UWPCreateCurCPPAPP1

관련 문제