Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

external variable | {$L MyFile.obj}


AlexZ ©   (2004-08-16 21:23:00) 

Здраствуйте, мастера!
Может кто знает, как объявить и использовать внешнюю переменную?
Со внешней процедурой разобрался, а с переменной - нет :(


Думкин   (2004-08-18 06:45:00) [1]

.MODEL LARGE,PASCAL
DATA SEGMENT
ASSUME DS:DATA
EXTRN VP0:TBYTE
EXTRN VP1:TBYTE
EXTRN VP2:TBYTE
EXTRN VP3:TBYTE
EXTRN VP4:TBYTE
EXTRN VP5:TBYTE
EXTRN VVP0:TBYTE
EXTRN VVP1:TBYTE
EXTRN VVP2:TBYTE
EXTRN VVP3:TBYTE
EXTRN VVP4:TBYTE
EXTRN VVP5:TBYTE

DATA ENDS
CODESEG

CONST
      VP0: EXTENDED=1.38629436112-2;
      VP1: EXTENDED=0.09666344259+1.38629436112-2*0.44325141463;
      VP2: EXTENDED=0.03590092383+0.09666344259-2*0.06260601220;
      VP3: EXTENDED=0.03742563713+0.03590092383-2*0.04757383546;
      VP4: EXTENDED=0.01451196212+0.03742563713-2*0.01736506451;
      VP5: EXTENDED=0.01451196212;

      VVP0:EXTENDED=0.5;
      VVP1:EXTENDED=0.12498593597+0.5-2*0.24998368310;
      VVP2:EXTENDED=0.06880248576+0.12498593597-2*0.09200180037;
      VVP3:EXTENDED=0.03328355346+0.06880248576-2*0.04069697526;
      VVP4:EXTENDED=0.00441787012+0.03328355346-2*0.00526449639;
      VVP5:EXTENDED=0.00441787012;
      V2:EXTENDED=2;
      V4:EXTENDED=4;


AlexZ   (2004-08-17 11:56:00) [2]

Единственный выход, это я сделал по совету Fredy314:
;_CoolModule.asm
EXTERN Variable
//DelphiProjrect
Var Variable : string[20];

...
Label2.text:=Variable;
----
Пока больше реального выхода нет.

Если объявить процедуру в obj-e, то придётся весь обж переделывать. GetVal - это впринципе выход, но придётся забирать значения через стек, это не очень удобно. От inline Asm я тоже отказался.

Ок. задача решена, всем спасибо. Fredy314, spec_thx!


Fredy314   (2004-08-17 09:07:00) [3]

Нужно было при создании obj обявить переменную как external в нём. а в pas файле просто обявить переменную тогда ты сможешь обращатся к ней и из обджа и из своей проги, я так в турбо паскале когдато делал, и пример как написать свой мышыний модуль тоже с таким методом видел в книге какойто по асму.


Dyn`alt   (2004-08-17 06:47:00) [4]

Можно обмануть компоновщик, объявив процедуру с именем как у внешней переменной, тогда адрес этой процедуры в действительности будет адресом переменной. Через него и обращаться


TUser   (2004-08-17 04:23:00) [5]

The $L directive is used to link with code written in other languages for procedures and functionsdeclared to be external.
Ни про какие переменные тут ничего не написано. Кстати, опиши свою задачу - может быть есть какое-то иное решение.
А про SetVal, GetVal - правильно. Нормальное решение, если уж никак без этого obj'а не обойтись.


AlexZ   (2004-08-17 01:26:00) [6]

Тогда, допустим, чтобы принять результаты через стек (боже...), надо в делфе заводить переменные-двойники. Наверное, чтобы этого избежать - надо использовать встроеный ассемблер. Потому, что сейчас в хелпе нашел скромненькую маленькую и незаметную фразку о том, что якобы переменные из библиотек нельзя использовать. Хотя, это у меня и не библиотека.
Ну, что-же.. Делфи и Борланды гордо молчат на эту тему..
Всё равно, как бы то ни было, спасибки за ответ.


Cobalt   (2004-08-17 00:50:00) [7]

Если у тебя получается работать с процедурами, то объяви две дополнительные процедуры - GetVar и SetVar.
Несколько неудобно, но это первое что приходит на ум для случая отсутствия возможности объявления "внешней переменной".


AlexZ   (2004-08-16 23:41:00) [8]

А, вот ещё: obj файл на TASMе подготовлен, если это имеет смысл.
Может на эту тему в другом разделе беседуют?


AlexZ   (2004-08-16 22:20:00) [9]

Благодарен за ответ, но "авось сообразим"... неподходит ;) Я перед тем как задать вопрос не менее 2х часов копался в хелпах, ЯндеХах и своём воображении :) (ну кто знает, чего Борланды напридумывать могли). Ну а внешняя процедура имеет вид:
{$L 'MyCoolAsmModule.obj'}
(--CUT--)
procedureMyCoolAssemblyProcedure; external;


TUser   (2004-08-16 21:38:00) [10]

Напиши, что такое внешняя процедцра - авось мы сообразим, что такое внешняя переменная. По аналогии.


Наверх

Титульная страница Поиск, карта сайта Написать письмо