0

我需要在 RAD Studio XE5 C++ 中进行 http 获取。RAD Studio 站点上的教程讨论了我拥有的版本中不包含的 RESTCLient。我找到了专门用于 Visual Studio 的 Casablanca 项目,并且我在 VS 中编写了一个小程序,它执行简单的 http get 并以我需要的方式处理响应。

我需要做什么才能在 RAD Studio 中成功使用 Casablanca?

到目前为止,我已经采取了一些步骤。

  1. 在 Visual Studio 2013 中编译 Casablanca
  2. 将 .lib 和 .dll 复制到 RAD Studio 项目中的文件夹
  3. 将该文件夹添加到 RAD Studio 项目中的链接路径
  4. 将 .lib 添加到项目中
  5. 将 dll 导入添加到应该在 .lib 中的类到我想要使用该函数的 .cpp 中。

class __declspec(dllimport) http_client;
class __declspec(dllimport) filestream; 
class __declspec(dllimport) producerconsumerstream; 
class __declspec(dllimport) rawptrstream; 

  1. 出现 OMF 错误,我使用 RAD Studio 附带的工具来转换 .lib,从而克服了错误。

我不知道如何声明函数的 dll 原型,因为返回类型来自库本身的命名空间,因此无法识别。http_client 是一个无法识别的结构。

我也试过了,没有 class 关键字。

4

1 回答 1

0

导出类的 DLL 不能跨编译器移植。因此,如果它导出类,您将无法在 C++Builder 中使用 Visual Studio 编译的 DLL。要么展平 DLL 接口以导出纯 C 样式函数(然后使用 C++Builder 的命令行 IMPLIB 工具为 DLL 创建导入 .lib 文件,不要使用 Visual Studio 创建的 .lib 文件),或者找到另一个解决方案。

例如,C++Builder(和 Delphi)附带有一个TIdHTTP组件的 Indy 10。您可以使用它的TIdHTTP::Get()方法来执行 HTTPGET请求。但是,如果您需要实际使用 REST,最好将 XE5 升级到TRESTClient可用的版本(顺便说一句,Embarcadero 的 REST 类在内部使用 Indy)。

于 2014-08-19T17:50:05.253 回答