Использовать сериализацию Delphi через JSON с C ++ - PullRequest
0 голосов
/ 06 марта 2019

Зная, что в C ++ нет отражения, я взглянул на методы Delphi и нашел пример использования библиотеки REST.JSON для сериализации: Преобразование объекта в JSON ...

Теперь я хотел бы использовать класс Delphi, который можно сериализовать и десериализовать с помощью предоставленных методов, в моем коде C ++:

TFoo = class(TObject)
private
public
  Fa: Integer;
  Fb: Double;
end;

В модуле C ++ класс сериализуется и десериализуется следующим образом:

#include <REST.Json.hpp>
#include "TestJson.hpp" //Contains TFoo

TFoo* foo = new TFoo(); 
foo->Fa = 1;
foo->Fb = 0.999;
String json = TJson::ObjectToJsonString(foo); //Works
delete foo;
foo = TJson::JsonToObject<TFoo*>(json); //Doesn't work
delete foo;

Сериализация работает нормально, но вызов TJson::JsonToObject приводит к ошибке компоновщика. Небольшое исследование показало, что этого следует ожидать при использовании обобщений Delphi с C ++ Как работать с обобщениями Delphi в C ++ .

В нем говорится, что создание экземпляров должно выполняться на стороне Delphi, поэтому я добавил функцию в модуль Delphi:

function GetObj(Json: string) : TFoo;
begin
  Result := TJson.JsonToObject<TFoo>(Json);
end; 

После того, как эта связь работает, но при запуске кода возникает следующая ошибка:

... EConversionError ... не может создать тип TestJson.TFoo ...

Когда функция вызывается из другого модуля Delphi, она работает нормально.

Отладка кода Embarcadero показала, что это происходит из-за отсутствия информации о типе, когда.

Есть ли способ заставить это работать?

...