Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-91545
Comper
2003-04-11 15:30
2003.04.28
Диаграмма Гантта


14-91554
saNat
2003-04-11 19:22
2003.04.28
Программно включить компьютер


6-91440
stur
2003-03-05 10:06
2003.04.28
Как обработать ошибку подключения TClientSocket в Blocking mode


4-91601
LeReve
2003-03-01 21:30
2003.04.28
как изменить цвет ToolBar a на АПИ?


14-91472
Плохой человек
2003-04-09 23:57
2003.04.28
Чем работать с палитрами.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский