Зная, что в 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 показала, что это происходит из-за отсутствия информации о типе, когда.
Есть ли способ заставить это работать?