gpt4 book ai didi

c - 从 C 中 LoadLibrary 加载的函数传回数据?

转载 作者:行者123 更新时间:2023-11-30 14:59:54 24 4
gpt4 key购买 nike

我正在尝试学习如何在 C 函数中正确使用 LoadLibrary,但是我遇到了困难,并且没有很多好的教程可供遵循。我创建了一个简单的 C 程序,它使用 libCurl 库成功获取网站的 HTML 并将其打印到控制台。我现在尝试使用 LoadLibraryGetProcAddress 以及 libcurl.dll 重新实现相同的函数。

如何从加载到内存中的函数传回数据?

下面发布的是使用有效的 .lib 的函数,以及随后尝试使用无法编译的 DLL 的函数。

这是我的工作计划:

#include "stdafx.h"
#include "TestWebService.h"
#include "curl/curl.h"

int main(int argc, char **argv)
{
CURL *curl;
CURLcode res;

curl = curl_easy_init();
if (curl) {

struct string s;
init_string(&s);

curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
/* example.com is redirected, so we tell libcurl to follow redirection */
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &s);

/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
if (res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));

/* always cleanup */
printf("%s\n", s.ptr);
free(s.ptr);
curl_easy_cleanup(curl);
}

return 0;
}

这是我尝试仅使用 LoadLibrary 复制相同的功能(即不使用 libCurl.lib)。但我收到以下错误消息并且无法确定原因。

1) a value of type "CURL" cannot be assigned to an entity of type "CURL *"  
2) '=': cannot convert from 'CURL' to 'CURL *'

#include "stdafx.h"
#include "TestWebService.h"
#include "curl/curl.h"

typedef CURL (*CurlInitFunc)();

int main(int argc, char **argv)
{
HINSTANCE hLib = NULL;
hLib = LoadLibrary("libcurl.dll");
if (hLib != NULL)
{
CURL *curl;
CurlInitFunc _CurlInitFunc;
_CurlInitFunc = (CurlInitFunc)GetProcAddress(hLib, "curl_easy_init");
if (_CurlInitFunc)
{
curl = _CurlInitFunc();

}

}
return 0;
}

最佳答案

这一行:

typedef CURL (*CurlInitFunc)();

声明一个指向返回CURL的函数的指针。但curl_easy_init()的原型(prototype)是:

CURL *curl_easy_init();

这意味着它返回一个指向CURL指针,即CURL*

因此正确的声明是:

typedef CURL *(*CurlInitFunc)();

关于c - 从 C 中 LoadLibrary 加载的函数传回数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42445614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com