2013-07-25 5 views
0

Я относительно новичок в C++ вообще и очень новый для разработки Windows.E_NOINTERFACE при вызове CreateDXGIFactory1

Я пишу программу, которая использует библиотеку DXGI - она ​​компилируется просто отлично, но когда я запускаю исполняемый файл, HRESULT из CreateDXGIFactory1 появляется как 0x80004002 или E_NOINTERFACE.

Я пропустил какую-то библиотеку, или здесь есть более глубокая проблема?

код я использую следующим образом:

Выход "Ошибка: 0x80004002".

//Initialize a UUID 
    GUID uuid; 
    HRESULT hCreateUUID = CoCreateGuid(&uuid); 

    //Convert the UUID to string 
    LPOLESTR stringUUID; 
    HRESULT hStringToUUID = StringFromCLSID(uuid, &stringUUID); 

    //Initialize the factory pointer 
    IDXGIFactory1* pFactory; 

    //Actually create it 
    HRESULT hCreateFactory = CreateDXGIFactory1(uuid, (void**)(&pFactory)); 
    if (hCreateFactory == S_OK) { 
    printf("Factory creation was a success\n"); 
    } else { 
    printf("ERROR: 0x%X\n", hCreateFactory); 
    } 

ответ

0

Вы передаете случайно созданный GUID. Это не имеет никакого смысла. Вы должны передать IID интерфейса, который хотите получить, а именно __uuidof(IDXGIFactory1). Пример в documentation показывает именно это.

+0

Спасибо, только что заметил, что на самом деле. Откуда возникает функция __uuid, только из любопытства? – javanix

+0

Это не функция, это специальный (нестандартный, специфичный для Microsoft) оператор, несколько похожий на 'sizeof' или' typeid'. Он читает аннотацию, прикрепленную к типу через '__declspec (uuid)', что, в свою очередь, является нестандартным декларатором, специфичным для Microsoft. Если вы посмотрите, как IDXGIFactory1 определяется в заголовках системы, вы увидите на нем '__declspec (uuid)' (обычно скрытый за макросом, поэтому потребуется некоторое копирование). –

+0

А, интересно - спасибо за информацию. – javanix

 Смежные вопросы

  • Нет связанных вопросов^_^