Вызов процедуры обнуляет переменные

Только для тех, кто пишет плагины под Total Commander. Обмен опытом, решение проблем.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Ответить
Аватара пользователя
D1P
Сообщения: 2987
Зарегистрирован: Пн дек 20, 2004 18:30
Откуда: Тбилиси
Контактная информация:

Вызов процедуры обнуляет переменные

Сообщение D1P »

Во время написания плагина super_wdx столкнулся со следующей проблемой: одна из процедур программы при работе с плагином FileType обнуляет все строковый переменные той процедуры, из которой она была вызвана.
Т.е, выглядит примерно так:

Код: Выделить всё

Function GetFieldValue (const PlugName, FieldName, FileName:string):string;
Begin
//загружаем плагин, получаем из него значение, возвращаем его
//внутри - всё в порядке, получаем значение из wdx-плагина.
result:=ТО_ЧТО_НАДО; //возвращаемое значение - правильное.
End;

Function DecodeContentString (ContentString:String):String;
Var
//some string variables here
a,b,c,x:string;
Begin
a:=SomeFuncResult;
b:=SomeOtherFuncResult;
c:=ThirdFuncResult;
//тут всё в порядке
x:=GetFieldValue (a,b,c);
//вот тут-то начинаются глюки - все строковые переменные становятся пустыми.
End;
При работе с ЛЮБЫМ плагином всё тип-топ, все переменные сохраняются. При работе с FileType в GetFieldValue всё проходит нормально, но x в DecodeContentString (и все строковые переменные в DecodeContentString) обнуляются.

Пробовал переделывать передачу параметров по всякому (глобальными переменными, ссылками, как угодно) - результаты те же - не работает только с FileType.wdx. Посмотрел, как ведёт себя WdxGuide с эти плагином - тоже выдаёт ошибку (ессно, когда отлаживаешь код), но проходит дальше - там по-другому сделана передача параметров, найденное поле сразу добавляется в список. Мне этот вариант ну никак не подходит.

Может быть кто-то сталкивался с такой проблемой, и знает как это исправить?
yurig
Сообщения: 3
Зарегистрирован: Чт янв 13, 2005 09:44

Сообщение yurig »

Скорее всего, у тебя там затирается стек. Обычно такое бывает при выходе за границы локального массива, или при записи по неправильному указателю. Еще надо проверить, как объявлены (и написаны!) функции FileType, которые вызываются из GetFieldValue, может быть, это там происходит.
Аватара пользователя
D1P
Сообщения: 2987
Зарегистрирован: Пн дек 20, 2004 18:30
Откуда: Тбилиси
Контактная информация:

Сообщение D1P »

Еще надо проверить, как объявлены (и написаны!) функции FileType, которые вызываются из GetFieldValue, может быть, это там происходит.
Надо бы :) А кто мне исходники даст этого плагина?
Себя гением программирования не считаю, но в моём коде ошибки быть не должно (хотя бы потому, что остальные плагины работают замечательно).
Ответить