crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

peperoni
  опции профиля:
сообщение 17.11.2013, 15:54
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 17.11.2013
Пользователь №: 3979

Спасибо сказали: 0 раз(а)




Репутация:   0  


Подскажите как подключать динамически стандартные DLL Windows и использовать вызовы к функциям Windows API?
Полагаю нужно что-то прописать в файле проекта, но что кокретно так и не понял.
Например, как заставить в QtCreator скомпилиться и запуститься простенькому консольному приложению взятому из MSDN, использующего CryptoAPI.
Примерчик просто выводит список доступных криптопровайдеров на консоль. Проверил его в VisualStudio - все рабоате, в QtCreator бился с LIBS += ..., но так и не победил.
Нужно под MinGW. Выдает ошибку E:\PROG\Qt\untitled1\main.c:-1: ошибка: undefined reference to `CryptEnumProviders'
Вызовы к функция CryptoAPI в дальнейшем планируется использовать в программе написанной с ипользованием библиотеки Qt.

#include <stdio.h>
#include <windows.h>
#include <Wincrypt.h>

void main()
{

    //---------------------------------------------------------------
    // Copyright (c) Microsoft Corporation.  All rights reserved.
    // Declare and initialize variables.

    DWORD       cbName;
    DWORD       dwType;
    DWORD       dwIndex;
    CHAR        *pszName = NULL; 

    // Print header lines for providers.
    printf("Listing Available Providers:\n");
    printf("Provider type\tProvider Name\n");
    printf("_____________\t__________________"
        "___________________\n");   

    //--------------------------------------------------------------- 
    // Loop through enumerating providers.
    dwIndex = 0;
    while(CryptEnumProviders(
           dwIndex,
           NULL,
           0,
           &dwType,
           NULL,
           &cbName
           ))
    {

        //-----------------------------------------------------------
        //  cbName returns the length of the name of the next 
        //  provider. Allocate memory in a buffer to retrieve 
        //  that name.

        if (!(pszName = (LPTSTR)LocalAlloc(LMEM_ZEROINIT, cbName)))
        {
           printf("ERROR - LocalAlloc failed\n");
           exit(1);
        }
        //-----------------------------------------------------------
        //  Get the provider name.
        if (CryptEnumProviders(
               dwIndex++,
               NULL,
               0,
               &dwType,
               pszName,
               &cbName
               ))
        {
            printf ("     %4.0d\t%s\n",dwType, pszName);
        }
        else
        {
            printf("ERROR - CryptEnumProviders failed.\n");
            exit(1);
        }
        LocalFree(pszName);

    } // End of while loop

    printf("\nProvider types and provider names "
        "have been listed.\n");
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
peperoni
  опции профиля:
сообщение 19.11.2013, 16:56
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 17.11.2013
Пользователь №: 3979

Спасибо сказали: 0 раз(а)




Репутация:   0  


Точно. Оказывается wincrypt.h который в Windows SDK отличается от того который в QtSDK для MinGW. В Qt SDK какой-то урезанный - не все функции описаны. Скопировал описание функций в исходник примерчика из Windows SDK и заработало! Самое интресное ничего не добавлял в файл проекта! Как только правильная библиотека загружается не понятно...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 28.5.2025, 13:47