Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];

Вниз

external variable | {$L MyFile.obj}   Найти похожие ветки 

 
AlexZ   (2004-08-16 21:23) [0]

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


 
TUser ©   (2004-08-16 21:38) [1]

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


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

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


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

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


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

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


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

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


 
TUser ©   (2004-08-17 04:23) [6]

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


 
Dyn`alt ©   (2004-08-17 06:47) [7]

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


 
Fredy314 ©   (2004-08-17 09:07) [8]

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


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

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

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

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

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


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

.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;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.038 c
14-1091689820
Rouse_
2004-08-05 11:10
2004.09.05
Пополнение мастеров :)


1-1092739496
CAMCOH
2004-08-17 14:44
2004.09.05
Canvas. Помогите разобратся.


14-1092742556
Vovchik_A
2004-08-17 15:35
2004.09.05
Предложение для киевлян


8-1087792169
Shnaider
2004-06-21 08:29
2004.09.05
Эквалайзер


1-1092819673
yaric
2004-08-18 13:01
2004.09.05
Работа с TStrings





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский