c++ - 使用来自 C++ 程序的 dll。 (borland c++ builder 和一般)

标签 c++ dll c++builder dllimport

我正在尝试在我的程序中使用一个 dll,即 libcurl,但是,它没有链接。 Libcurl 带有我可以包含的 .h 文件(处理 dllimport),但是我想我必须指定在以某种方式链接时实际使用哪个 dll ...我该怎么做?我正在使用 Borland C++ builder 进行编译,但我真的很想知道这些东西通常是如何工作的...

编辑: 这是代码(来自 curl 主页的直接 c/p)

bool FTPGetFile::ConnectToFTP(string ftpServer){
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
    res = curl_easy_perform(curl);
    return true;
}else{
    return false;
}
} 

这里是错误:

[Linker Error] Error: Unresolved external '_curl_easy_init' referenced from C:\PROJECTS\PC\TOOLBOX\DEBUG_BUILD\FTPGETFILE.OBJ
[Linker Error] Error: Unresolved external '_curl_easy_setopt' referenced from C:\PROJECTS\PC\TOOLBOX\DEBUG_BUILD\FTPGETFILE.OBJ
[Linker Error] Error: Unresolved external '_curl_easy_perform' referenced from C:\PROJECTS\PC\TOOLBOX\DEBUG_BUILD\FTPGETFILE.OBJ

编辑 2:根据 joe_muc 的建议,我使用 implib 工具制作了 lib 文件,并将它们包含在链接器路径中。我仍然遇到同样的错误。

最佳答案

如前所述,您将需要与您运行的 .dll 一起使用的静态 .lib 文件 通过 implib 并将结果 lib 文件添加到您的项目中。

如果你这样做了,那么:

  • 您可能需要使用 stdcall 调用约定。 您没有提到您使用的是哪个版本的 Builder,但是 它通常在项目选项 - 高级编译器 - 调用约定下。
  • 您可能需要启用 MFC 兼容性选项。
  • 这可能是名称修改问题(项目选项 - C++ 兼容性选项)。
  • 或者生成下划线
  • 或打开或关闭高级链接器选项“Case_insensitive-link”

libcurl 似乎是 C 代码;但如果是C++,注意微软和Borland类一般不兼容。应该有让他们工作的技巧,但处理起来真是一团糟,我从来没有成功过。 C 编码的 DLL 应该可以工作。

关于c++ - 使用来自 C++ 程序的 dll。 (borland c++ builder 和一般),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/367926/

相关文章:

c++ - 构建与 Dreamweaver 兼容的 C DLL

dll - g++ 无法识别 dll 的文件格式

c - VS 2013错误C1853尝试构建DLL(但不使用预编译头集)

c++ - 磁盘调度程序 SCAN 算法错误

c++ - 合并对象的有效方法

c++ - 这个奇怪的代码是做什么的?

c++ - 函数不会抛出 bad_alloc 异常

delphi - TDateTimePicker MaxDate - 不允许将控件设置为当前日期

C++Builder 强制编译一个特殊文件

c++ - 在哪里放置 std::wstring_convert<std::codecvt_utf8<wchar_t>>?