База знаний

Шаг 1 – попробуйте найти ответ:

Работа со сложными объектами. Сообщение: Заданное приведение является недопустимым
Автор Alexey TSLab на 18 August 2016 02:04


Имеем структуру с кодом

public struct PosRT
{
public int pos;
public double price;
public DateTime time;

public PosRT(int p1, double p2, DateTime p3)
{
pos = p1;
price = p2;
time = p3;
}
}

Сохраняем в кеш

PosRT SP = new PosRT(1, 100, DateTime.Now);
ctx.StoreGlobalObject("Cache", SP);

Читам из кеша

if (cache == null){
ctx.Log("Параметры не определены !!!", 0xff8877);
return;
}
PosRT SP2 = new PosRT();
SP2 = (PosRT) cache;

Весь код замечательно работает внутри одного скрипта, но когда считываюший код поместить в другой скрипт, то на последней срочке SP2 = (PosRT) cache выдается сообщение:

13:27:49.61 System.InvalidCastException: Заданное приведение является недопустимым.
в AVScript.RealtimeOrders.Execute(IContext ctx, ISecurity sec)
в TSLab.User.Script.Execute(IContext context, ISecurity Источник1)

Объявление структуры вынесено в отдельный файл, который дополнительно цепляется к блокам "Внешний скрипт" в обоих скриптах, записывающем и считывающем. Если же я использую простые типы (int, double и т.д), то все работает нормально.

 

Типы объявленные в разных библиотеках по факту это разные типы. Отсюда следует, что Вам нужно общие типы данных объявлять в отдельной библиотеке. Тогда все будет работать.

(0 голос(а))
Эта статья полезна
Эта статья бесполезна