![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]Напиши, что такое внешняя процедцра - авось мы сообразим, что такое внешняя переменная. По аналогии.