Значения перечисления Delphi изначально определены как целые числа без знака - 1, 2 или 4 байта, в зависимости от настройки MINENUMSIZE.
У меня есть случай, когда мы используем варианты для передачи данных различных типов данных междуПриложения.Все другие типы данных работают хорошо, но теперь мы поняли, что ожидание от других приложений состоит в том, что перечисленные значения должны быть целыми числами со знаком, а не без знака (и некоторые действительно проверяют это).
Есть ли способ настроитьавтоматическое преобразование варианта, что значения перечисления будут преобразованы в varInteger вместо varUInt32?
Фон: мы пишем код библиотеки для OPC UA.OPC UA определяет тип с именем Variant, который имеет историю в Windows Variant, но теперь определяется по-другому.На практике OPC UA определяет, что значения перечисления передаются как Int32 по проводам.
OPC UA также определяет тип данных с именем DataValue, который состоит из Value (как вариант), StatusCode (UInt32) и некоторой метки времениfields.
Теперь мы используем Delphi Variants для отображения OPC UA Variant, так как в целом он работает хорошо.Теперь единственной серьезной ошибкой является то, что когда вы записываете значение перечисления в Variant, оно преобразуется в UInt32, тогда как OPC UA ожидает Int32.
Библиотека принимает варианты (в DataValues) и как разработчик приложения, выможно просто присвоить значения перечисления для DataValue, и все выглядит хорошо.Однако значение было преобразовано в UInt32, и когда код библиотеки видит этот вариант, он больше не может знать, что он фактически соответствует типу перечисления переменной.
Если мы сможем контролировать автоматическое преобразование (илина самом деле это родной тип данных перечислений), мы могли бы просто избавиться от этой проблемы.
Если это невозможно, нам действительно придется изобретать код преобразования везде, где мы можем, но который никогда не может бытьВ конце концов, на 100%.