Still struggling..

test.d:
-----------------------------------
( ... )  /* Other imports */
import win32.directx.d2d1;

alias win32.directx.d2d1.IID IID;
IID IID_ID2D1Factory = { 0x06152247, 0x6F50, 0x465A, [0x92, 0x45, 0x11, 0x8B, 0xFD, 0x3B, 0x60, 0x07] };

extern (Windows)
int WinMain( ... )
{
    ( ... ) /* Boilerplate code */
}

int myWinMain( ... )
{
( ... ) /* Register class, Create window, show window, message loop */
}

LRESULT WndProc( ... )
{
    switch (message)
    {
        ( ... ) /* Default and case WM_DESTROY */

        case WM_CREATE:

            // arg2
            REFIID pIID_ID2D1Factory;
            pIID_ID2D1Factory = cast(REFIID)&IID_ID2D1Factory;

            // arg3
            D2D1_FACTORY_OPTIONS factoryOptions;
factoryOptions.debugLevel = D2D1_DEBUG_LEVEL.INFORMATION; const D2D1_FACTORY_OPTIONS* pfactoryOptions = &factoryOptions;

            // arg4
            void* pID2D1Factory;


            HRESULT hr = D2D1CreateFactory(
                    D2D1_FACTORY_TYPE.SINGLE_THREADED,
                    pIID_ID2D1Factory,
                    pfactoryOptions,
                    pID2D1Factory
                    );

            writeln(hr);               // Prints 0
writeln(pID2D1Factory); // Prints a non-null pointer

            // Trying to use the interface
            float dpiX, dpiY;
            pID2D1Factory.GetDesktopDpi(dpiX, dpiY);
            // !!! Error: undefined identifier 'GetDesktopDpi'
// I thought I had a pointer to the interface and could call
            // its methods...

            return 0;

------------------------------

* Coffimplib was used to convert the d2d1.lib from Microsoft DirectX SDK (June 2010). The converted d2d1.dll was placed in C:\dcode\dlls * With test.d in C:\dcode, the file was compiled and linked in C:\dcode with: dmd test.d %cd%\dlls\d2d1.lib -I%cd%\dlls\ -version=DXSDK_JUNE_2010


- Why is the method identifier undefined?
- Are there any code examples showing the right use of the bindings?

Reply via email to