Casablanca — REST C++ SDK, используемый в Embarcadero RAD Studio XE5.

Мне нужно получить http в RAD Studio XE5 C++. В руководствах на сайте RAD Studio обсуждается RESTCLient, который не включен в мою версию. Я нашел проект Casablanca, специально предназначенный для Visual Studio, и сделал небольшую программу в VS, которая выполняет простое получение http и обрабатывает ответ так, как мне нужно.

Что мне нужно сделать, чтобы успешно использовать Casablanca из RAD Studio?

Есть шаги, которые я предпринял до сих пор.

  1. Скомпилировано Casablanca в Visual Studio 2013
  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 — неопознанная структура.

Я пробовал это и без ключевого слова класса.


person user2708814    schedule 18.08.2014    source источник


Ответы (1)


Библиотеки DLL, экспортирующие классы, не переносимы между компиляторами. Таким образом, вы не сможете использовать DLL, скомпилированную Visual Studio, в C++Builder, если она экспортирует классы. Либо сгладьте интерфейс DLL, чтобы вместо этого экспортировать простые функции в стиле C (а затем используйте инструмент IMPLIB командной строки C++Builder для создания файла .lib импорта для DLL, не используйте файл .lib, созданный Visual Studio), или найти другое решение.

Например, C++Builder (и Delphi) поставляется с Indy 10, который имеет компонент TIdHTTP. Вы можете использовать его метод TIdHTTP::Get() для выполнения HTTP-запроса GET. Но если вам действительно нужно использовать REST, вам может быть лучше просто обновить XE5 до версии, в которой есть TRESTClient (кстати, классы REST Embarcadero используют Indy внутри).

person Remy Lebeau    schedule 19.08.2014