Форум: "Основная";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];
ВнизКак в переменной типа vaiant сохранить Pointer? Найти похожие ветки
← →
paxer (2003-04-15 17:45) [0]Необходим тип данных variant, в котором можно было бы хранить Pointer (объекты). Возможно ли это? Мне кажется невозможно, но как тогда можно было бы решить эту проблему? Какие видятся пути?
← →
Skier (2003-04-15 17:52) [1]как видно из TVarData там нет Pointer - а.
проще всего делать такой кастинг :
Var
A : Variant;
AObj : TSomeClass;
begin
//...........
A := Integer(AObj);
//...........
AObj := TObject(Integer(A));
//...........
end;
← →
DiamondShark (2003-04-15 17:53) [2]Приводить Pointer к Cardinal
← →
paxer (2003-04-15 17:58) [3]Проблема в том, что в данной переменной могут хранится и числовые значения.Если Pointer сохранять в виде Integer то я их не смогу отличить друг от друга. VarType вернет в обоих случаях varInteger.
← →
Skier (2003-04-15 18:03) [4]>paxer
А для чего это всё используется ?
← →
MBo (2003-04-15 18:05) [5]подбери vartype, который у тебя не используется, например, Single - тоже четырехбайтовый
← →
paxer (2003-04-15 18:10) [6]Skier © > ну это длинная история...
MBo © > в принципе я так и думаю поступать, но это накладывает на меня кучу доп. работы - присваивание происходит во многих местах и боюсь, как бы где не пропустил не тот тип. Поэтому хотелось бы как-то понадежнее.
← →
DiamondShark (2003-04-15 18:12) [7]Надёжнее -- тогда интерфейсы.
Или рассказать длинную историю
← →
Игорь Шевченко (2003-04-15 18:14) [8]varByRef не подойдет ?
← →
paxer (2003-04-15 18:27) [9]DiamondShark © > Длинная история. Вкратце. Для меня основной язык программирования - 1С. Мною написана ДЛЛ для 1С которая позволяет производить настройку проводок и работы документа без написания кода в 1С. Не хочу присваивать чужие лавры, но это переделка кода, написанного мной и другими программистами нашей фирмы на 1С. Получилось, что 1С - это просто хранилище данных, внутренний язык на простых задачах уже не используется. У нас есть внедренцы, которые настраивают полностью бухучет на фирмах, не зная языка 1С. Вот я и решил написать прогу, которая делала бы то же самое, только без самой 1С.
В качестве объекта у меня выступают объекты системы - справочники, документы и т.д. Когда это была ДЛЛ под 1С, то это действительно были интерфейсы. У меня же интерфейсов нет.
Игорь Шевченко © > varByRef - я если честно, не знаю как с ним работать. Хелпа в Делфи для меня к сожалению недостаточно, а в имеющейся у меня литературы описания я не встречал.
← →
Skier (2003-04-15 18:32) [10]>paxer
> В качестве объекта у меня выступают объекты системы - справочники,
> документы и т.д.
Тогда может быть стоит сделать запись и работать с ней
в зависимости от типа данных, т.е.
TYourRec = packed record
yrDataType : Integer; //или Enumeration Type
yrData : Pointer; //сами данные...
end; //TYourRec
PYourRec = ^TYourRec;
в работаешь с данными (yrData) зависимости в типа (yrDataType)
?
← →
paxer (2003-04-15 18:32) [11]Извиняюсь, не уточнил. ДЛЛ под 1С написана на Делфи (не учел, что кто не знаком с 1С не знает, что ДЛЛ можно под нее писать только на других языках).
← →
paxer (2003-04-15 18:39) [12]Skier © > такой вариант я тоже обдумываю. Собираюсь прийдя домой прочитать про записи с вариантами (я как про них прочитал в студенческие годы, так с тех пор и не использовал). Но не хотелось бы переделывать большое кво кода, опирающегося на VarType. Не считая мест, где я провожу арифметические операции и присваивание, а я боюсь, что эти места переделывать придется тоже.
← →
Игорь Шевченко (2003-04-15 18:40) [13]paxer (15.04.03 18:27)
Win32.hlp VARIANT and VARIANTARG
← →
Serginio (2003-04-15 19:10) [14]Если тебе нужен 1С почитай
http://www.1c.hippo.ru/cgi-bin/predownl.cgi?id=2019
А ссылку на Pointer можешь хранить в TVarData(V).VPointer. Только TVarData(V).VType сделай свой.
← →
paxer (2003-04-16 11:55) [15]Спасибо Serginio. Это как раз то, что нужно:
TVarData(v).VType := varByRef;
TVarData(v).vPointer:=nil;
>
Если тебе нужен 1С почитай
http://www.1c.hippo.ru/cgi-bin/predownl.cgi?id=2019
Скачал. Идею я где-то уже слышал. Реализацию увидеть не смог, т.к. какой проект не открою - чего-то не хватает. То модуля Variants, то QForms. Это очень интересно, но не то, что мне нужно. ДЛЛ уже написана по технологии внешних компонент 1С.
← →
Serginio (2003-04-16 14:25) [16]Напиши, что именно не получилось подскажу. Но лучше избегать вариантов.Я использую такую возможность из-за отказа использования IDispatch и из-за некоторого уменшения кода кргда к вызываю у неопределенного объекта его свойство.У меня Практически все передается через объекты напрямую .
← →
Serginio (2003-04-16 14:27) [17]Напиши, что именно не получилось подскажу. Но лучше избегать вариантов.Я использую такую возможность из-за отказа использования IDispatch и из-за некоторого уменшения кода кргда к вызываю у неопределенного объекта его свойство.У меня Практически все передается через объекты напрямую .
Ставь Delphi7. Либо удали Variants и создай свою Форму. Не учел, что люди еще на 5 ке программируют.
← →
Serginio (2003-04-16 16:11) [18]Тогда почитай про диспинтерфейсы может пригодится.
← →
paxer (2003-04-16 17:35) [19]Serginio >
Когда у меня появится время (звучит риторически) я попробую разобраться с твоим примером. Там есть много вопросов, которые мне интересны. Но интересны не с точки зрения связи 1С с Делфи. ДЛЛ я пишу на работе и основные вопросы я уже решил. Дело в том, что если ты читал мою "длинную историю" то наша ДЛЛ позволяет настраивать проводки и работу формы документа без изменения кода в 1С. Сама 1С стала просто хранилищем данных и конструктором форм. Я решил попробовать написать свое хранилище данных и конструктор. Занимаюсь я этим сам, в свободное время (наверное, как и ты занимаешься своим проектом).
← →
Serginio (2003-04-16 17:51) [20]Пиши. Дело в том, что я как раз и использую как хранилище но интегрирую с 1С либо отдельно от 1С. Но только на ДБФ файлах.
На данный момент увлекся NET так, что данный проект уже не интересен. Но помочь, чем смогу попробую.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.008 c