다음을 통해 공유


D1108: 잘못된 팩터리

리소스 [리소스]는 팩터리 [factory 1]에 의해 할당되었으며 팩터리 [팩터리 2]와 함께 사용되었습니다.

자리 표시자

리소스

인터페이스의 주소입니다.

팩터리 1

리소스를 할당한 팩터리의 주소입니다.

팩터리 2

리소스가 사용된 팩터리의 주소입니다.

 

예제

다음 예제에서는 먼저 디버그 사용 ID2D1Factory 개체 두 개를 만듭니다. 그런 다음 첫 번째 팩터리에서 기하 도형을 만들고 두 번째 팩터리에서 브러시를 만듭니다. 마지막으로 FillGeometry를 호출하여 기하 도형과 브러시를 전달합니다.

        // If you set the options.debugLevel to D2D1_DEBUG_LEVEL_NONE,
        // the debug layer is not enabled.
#if defined(DEBUG) || defined(_DEBUG)
        D2D1_FACTORY_OPTIONS options;
        options.debugLevel = D2D1_DEBUG_LEVEL_INFORMATION;

        hr = D2D1CreateFactory(
            D2D1_FACTORY_TYPE_SINGLE_THREADED,
            options,
            &m_pD2DFactory
            );
#else
        hr = D2D1CreateFactory(
            D2D1_FACTORY_TYPE_SINGLE_THREADED,
            &m_pD2DFactory
            );
#endif


        // Domain violation. Create a second Direct2D factory.
        options.debugLevel = D2D1_DEBUG_LEVEL_INFORMATION;
        hr = D2D1CreateFactory(
            D2D1_FACTORY_TYPE_SINGLE_THREADED,
            options,
            &m_pD2DFactory1
            );

        // Create a geometry from the second factory.
        hr = m_pD2DFactory1->CreateRectangleGeometry(
            D2D1::RectF(100, 50, 400, 160),
            &m_pRectangleGeometry
            );
C++
        // Create a render target from the first factory.
        hr = m_pD2DFactory->CreateHwndRenderTarget(
            D2D1::RenderTargetProperties(),
            D2D1::HwndRenderTargetProperties(m_hwnd, size),
            &m_pRenderTarget
            );
C++
        if (SUCCEEDED(hr))
        {
            hr = m_pRenderTarget->CreateSolidColorBrush(
                D2D1::ColorF(D2D1::ColorF::Black, 1.0f),
                &m_pBlackBrush
                );
        }
C++
        m_pRenderTarget->FillGeometry(
            m_pRectangleGeometry,   //The rectangle geometry created from the second factory.
            m_pBlackBrush   //The black brush created from the first factory.
            );

이 예제에서는 다음 디버그 메시지를 생성합니다.

 D2D DEBUG ERROR - The resource [003BD628] was allocated 
by factory [002ED698] and used with factory [002ED470].

가능한 원인

리소스 사용이 잘못되었습니다. 한 팩터리에서 할당한 리소스가 다른 팩터리에서 사용되었습니다.