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

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

Значения переменных


Страницы:   1 2

mixi ©   (2004-03-09 14:27:00) 

Есть такая проблема:
Существует некая программа стороннего производителя, которая во время своей работы меняет значения своих переменных. Имена этих переменных известны. Причем изменения происходят ежесекундно.
Вопрос: можно ли используя Delphi написать такую программку, которая будет следить за этими переменными и записывать в какой либо файл, либо в базу данных их ежесекундные значения. Если такое возможно подскажите как сделать.

Заранее благодарен


coban2k   (2004-03-10 18:18:00) [1]

Ни один компилятор C/C++ не экспортирует даже при дебаге мод'е имена переменных, имена функций пожалуйста, переменных - никогда!


Digitman   (2004-03-10 16:31:00) [2]

куда считывает ? в какую твоюпеременную ? где это видно в приведенном коде ? какой тип и значение имеет  ид-р PLANE_ALTITUDE ? где прототип MAKE_NEEDLE ? это что - ф-ция ? процедурв ? макрос ? или что ?

то что ты привел - огрызки кода, непонятно как вызываемого ... "на деревню дедушке"


mixi   (2004-03-10 15:42:00) [3]

Вот кусок кода в котором считывается значение переменной PLANE_ALTITUDE. И в соответствии с этими значениями поворачивает битмап стрелы соответственно координатам, которые описаны в NONLINEARITY  nonlinearity[] =(для первого битмэпа)и NONLINEARITY  nonlinearity1[] = (для второго битмэпа)

аналогично можно не поворачивать битмэп, а выводить значение переменной в текущее время в файл:

// Set up import and export tables and gauge header
char      gauge_name[]  = "SDK.Fuel\0";
extern PELEMENT_HEADER  list;
MODULE_SETUP( GAUGE_HEADER_VERSION, 57, gauge_name, &list )

MODULE_VAR   alt={GROUND_ALTITUDE};
MODULE_VAR   altp={PLANE_ALTITUDE};

NONLINEARITY  nonlinearity[] =
{
       {{18,  94},  0, 0},
       {{15,    74},    10, 0},
{{20,    55},    20, 0},
       {{26,    40},    30, 0},
       {{36,    30},    40, 0},
       {{46,    22},    50, 0},
       {{57,    19},    60, 0},
       {{75,    16},    80, 0},
       {{90,    15},    100, 0},
       {{115,    29},    150, 0},
       {{154,    44},    200, 0},
       {{132,    56},    250, 0},
       {{133,    67},    300, 0},
       {{133,    83},    400, 0},
{{126,  104},  600, 0},
       {{18,    94},    601, 0},
};
NONLINEARITY  nonlinearity1[] =
{
       {{18,  94},  10, 0},
       {{15,    74},    0, 0},
{{20,    55},    30, 0},
       {{26,    40},    40, 0},
       {{36,    30},    20, 0},
       {{46,    22},    60, 0},
       {{57,    19},    90, 0},
       {{75,    16},    80, 0},
       {{90,    15},    100, 0},
       {{115,    29},    150, 0},
       {{154,    44},    200, 0},
       {{132,    56},    250, 0},
       {{133,    67},    300, 0},
       {{133,    83},    400, 0},
{{126,  104},  600, 0},
       {{18,    94},    601, 0},
};

FAILURE_RECORD fail[] =
{
{FAIL_SYSTEM_ELECTRICAL, FAIL_ACTION_ZERO},
{FAIL_GAUGE_FUEL_INDICATORS, FAIL_ACTION_FREEZE},
{FAIL_NONE, FAIL_ACTION_NONE}
};

MODULE_VAR_CB fuel_cb;

MAKE_NEEDLE( needle,
   BMP_NEEDLE,
   NULL,
   NULL,
   IMAGE_USE_TRANSPARENCY|IMAGE_USE_ERASE,
   0,
   {75, 75},
   {27, 4},
   {100, 120},
    PLANE_ALTITUDE ,
                               fuel_cb,
                               //NULL,
                               nonlinearity,
                               6)
PELEMENT_HEADER  plist1[] =
{
(PELEMENT_HEADER)&needle,
NULL
};


Digitman   (2004-03-10 14:00:00) [4]

все что в прикл.задачах можно сделать на C, точно так же можно сделать и на Паскале в Делфи.


> Я могу реализовать чтение этих переменных на С


покажи в коде как ты получаешь доступ к "переменным" в модуле на C - и получишь рекомендации к реализации того же самого в модуле на Паскале в Делфи

ибо есть оч большие сомнения, что ты адекватно воспринимаешь термин "переменная" и его сущность в данном контексте ...


mixi   (2004-03-10 13:13:00) [5]

Ну про знания помолчу. Дело все в том, что это SDK игры Microsoft Flight Simulator точнее SDK для написания собственных приборов для моделей самолетов.Данная задача ставилась для того чтоб написать прибор расшифровщик полетов. А поскольку клиентскую часть я написал на Delphi я и хотел узнать возможно ли сделать чтение переменных на Delphi. Я могу реализовать чтение этих переменных на С вот только dll придется прямо в панель каждой модели совать, что не совсем хочется. Хотелось просто спросить возможно ли это на Delphi и сделать универсальную утилиту для всех моделей. Ну а поскольку я вижу что ни кто не может дать вразумительный ответ по этому поводу. Считаю вопрос снятым и с удовольствием возвращаюсь к С-ным описаниям.


Digitman   (2004-03-10 10:46:00) [6]

))

и как ты предполагаешь, имея вот это вот "добро", реализовать [5] ?


Плохиш   (2004-03-10 10:42:00) [7]

>mixi ©   (10.03.04 10:36) [13]
>mixi ©   (10.03.04 10:38) [14]

С Вашими знаниями, Вы слишком рано за такую задачу берётесь.
Почитайте для начала про C-ые описания


mixi   (2004-03-10 10:38:00) [8]

Вот типа описание переменных из SDK

// Token list
//
// Token list for abstracted variable access
// The order of variables in this list is tied to the token map in the
// file panels\util_defs.c.  Every token here needs an entry in the
// token map, which maps tokens to variables in memory.
//
// There are two types of tokens.  Normal tokens are used for all the
// variables in GLOBALS, as well as variables exported from modules.
// Special tokens are used for variables which require a function call
// to get the required information.
//
// Tokens can be added anywhere in the list, but keep the lists aligned!
//
// DO NOT CHANGE THE ORDER OF THESE TOKENS UNLESS YOU REALLY KNOW WHAT
// YOU'RE DOING!
//

typedef enum GAUGE_TOKEN
{
MODULE_VAR_NONE = 0,
TICK18,      //  inc'd at 18hz. used for general purpose timing
GROUND_ALTITUDE,   //  ground level altitude (1/256 meter/unit)
CLOCK_HOUR,     //  local clock time, hours {0..23}
CLOCK_MINUTE,    //  local clock time, minutes {0..59}
CLOCK_SECOND,    //  local clock time, seconds {0..59}


mixi   (2004-03-10 10:36:00) [9]

И хелп подбросил,
а вот и фрагмент текста:

// defines for VOR_INFO.CODE field
#define VOR_CODE_IS_LOCALIZER   BIT7 // bit7 = 0= VOR  1= Localizer
#define VOR_CODE_GLIDESLOPE       BIT6 // bit6 = 1= Glideslope Available
#define VOR_CODE_BACKCOURSE_UNAVAIL     BIT5 // bit5 = 1= no localizer backcourse
#define VOR_CODE_DME_AT_GLIDE_SLOPE     BIT4 // bit4 = 1= DME transmitter at Glide Slope Transmitter
#define VOR_CODE_NAV_UNAVAILABLE     BIT3 // bit3 = 1= no nav signal available
#define VOR_CODE_VOICE_AVAILABLE     BIT2 // bit2 = Voice Available
#define VOR_CODE_TACAN        BIT1 // bit1 = TACAN
#define VOR_CODE_DME_AVAILABLE      BIT0 // bit0 = DME


Digitman   (2004-03-10 08:27:00) [10]


> дал SDK со всеми переменными


приведи фрагмент текста из SDK, где фигурирует описание некоей "переменной"


evvcom   (2004-03-10 08:02:00) [11]

А к этому SDK производитель Help не подбросил?


mixi   (2004-03-10 07:56:00) [12]

Сторонний производитель дал SDK со всеми переменными и эвентами. Вот отсюда они и известны. Важно просто брать их значения во время выполнения программы и с интервалом в одну секунду запихивать в файл.


EXE7   (2004-03-09 15:56:00) [13]

> Имена этих переменных известны
откуда известны?


Digitman   (2004-03-09 15:52:00) [14]


> Имена этих переменных известны


откуда они известны ?
сторонний производитель вместе с исп.модулями предоставил их исх.тексты ?


mixi   (2004-03-09 15:07:00) [15]

Напишите примерчик пожалуйста


icebeerg   (2004-03-09 15:03:00) [16]

Попробовать указатели на эти адреса накинуть, но тут будет гемор с правами доступа.


mixi   (2004-03-09 15:00:00) [17]

Хорошо буду знать адреса что делать дальше????


Cobalt   (2004-03-09 14:57:00) [18]

Попробуйте отладчик запустить. Может, в проге есть отладочная информация...


mixi   (2004-03-09 14:48:00) [19]

А как узнать адреса???


icebeerg   (2004-03-09 14:37:00) [20]

Сложно, помоему. Тут вроде надо бы знать тип переменных, залезть в пространство данных "сторонней" программы отсканить его на предмет известных значений с учетом типа и потом по сегменту и смещению монитроить.
Поправте если я не прав.


Страницы:   1 2

Наверх

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