Код: Выделить всё
#define CURLOPT_URL 10002
#define CURLOPT_POST 47
#define CURLOPT_POSTFIELDS 10015
#define CURLOPT_WRITEFUNCTION 20011
#define CURLOPT_WRITEDATA 10001
#define CURLE_OK 0
Код: Выделить всё
curlFunctions->easy_setopt(curl, CURLOPT_URL, request.url.c_str());
curlFunctions->easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeCallback);
curlFunctions->easy_setopt(curl, CURLOPT_WRITEDATA, response);
Поскольку я динамически привязываюсь к libcurl.dll, а не статически привязываюсь к libcurl.lib, я все еще нужно включить Curl.h в мой проект? Или я могу просто использовать LoadLibrary и GetProcAddress для загрузки и вызова функций из DLL без необходимости включения заголовка?
Прошу прощения, если это простой вопрос — я все еще изучаю WinAPI и C++, и я пытаюсь глубже понять эти концепции. Буду признателен за любые советы и идеи!
РЕДАКТИРОВАТЬ
Для пояснения:
Я добавил вручную #defines в моем проекте, чтобы я мог протестировать LOADLIBRARY и GETPROCADDRESS. это сработало, и я смог отправлять HTTP-запросы.
Затем я попытался добавить Curl.h (чтобы мне не приходилось вручную объявлять #defines, необходимые для выполнения операций скручивания ), но я получил кучу предупреждений (потому что компилятор заглядывает внутрь "curl.h" и видит множество определений [это заголовок библиотеки], но, конечно, я их не реализовал... Я импортирую функции из DLL, используя GETPROCADDRESS);
Пример предупреждений (постов всего 4, а всего их 35, все равно "определение функции xxxxx не найдено"):
*1. Определение функции для «curl_strequal» не найдено.
- Определение функции для «curl_strnequal» не найдено.
< li>Определение функции для «curl_mime_init» не найдено. - Определение функции для «curl_mime_free» не найдено.*
Пример импорта из LIBCURL.DLL (я немного почистил его, чтобы показать использование «основных» функций.. .)
Код: Выделить всё
hModuleLibCurl = LoadLibrary(TEXT("libcurl-x64.dll"));
if (!hModuleLibCurl) {
return;
}
// Load function pointers
easy_init = (CurlEasyInit)GetProcAddress(hModuleLibCurl, "curl_easy_init");
easy_cleanup = (CurlEasyCleanup)GetProcAddress(hModuleLibCurl, "curl_easy_cleanup");
easy_setopt = (CurlEasySetopt)GetProcAddress(hModuleLibCurl, "curl_easy_setopt");
easy_perform = (CurlEasyPerform)GetProcAddress(hModuleLibCurl, "curl_easy_perform");
easy_getinfo = (CurlEasyGetinfo)GetProcAddress(hModuleLibCurl, "curl_easy_getinfo");
slist_append = (CurlSlistAppend)GetProcAddress(hModuleLibCurl, "curl_slist_append");
// Check if any of the function pointers failed to load
if (!easy_init || !easy_cleanup || !easy_setopt || !easy_perform || !easy_getinfo || !slist_append) {
FreeLibrary(hModuleLibCurl);
}
Я думаю, что главный вопрос:
При динамической загрузке .dll и использовании ее функций, как обращаться со значениями, которые были ОПРЕДЕЛЕНЫ (с помощью #define) внутри библиотеки? Мне следует статически связать заголовочный файл, хотя я пытаюсь загрузить его только динамически? Если да, то как бороться с предупреждениями (поскольку .h содержит гораздо больше функций, которые необходимо определить, но они все мне не нужны в моем проекте)?
Подробнее здесь: https://stackoverflow.com/questions/793 ... -define-in
Мобильная версия