Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.108.171] |
|
Сообщ.
#1
,
|
|
|
Ситуация такая есть некая система(довольно большая) написаная на FoxPro, а я пишу программы на си++ для нее(через fll-библиотеки) сейчас передо мной стоит проблема, я должен обратиться к глобальным переменным FoxPro для того чтобы не передавать куеву тучу параметров. Кто может подсказать хоть что нибудь буду очень благодарен, или хотя бы подсказать в какую сторону смотреть.
|
Сообщ.
#3
,
|
|
|
Я ни ыксперт по данным "системам", но некоторое мнение все же есть. Писать во что-угодно через память возможно, если только все находится на одной машине. Для этого нужно всего-то знать адрес нужной переменной в памяти и ее тип. Вот только дело в том, что адрес данной переменной может внезапно измениться и твоя программа перезапишет что-нить не то. Другими словами если у этой системы нет никаких специальных интерфейсов для этого, то писать напрямую в память очень опасно.
Цитата Umbrellla90 @ для того чтобы не передавать куеву тучу параметров. А чего это так сложно? По моему скромному мнению нормальный вариант. |
Сообщ.
#4
,
|
|
|
Там вроде как наоборот, мне нужно достать из памяти системы глобальные переменные, как я понял там объясняется как задать глобальную переменную в своей памяти и чтобы одной ей могли пользоваться разные процессы.
Я просто не понимаю как это вообще сделать ни малейшей мысли.. Все что мне пока в голову пришло задать их руками по умолчанию но они могут изменяться, поясню: В памяти системы(которая на FoxPro) есть переменные IT_SC_* их там порядка 20-25, пока что они не меняются но не известно что будет в будущем а каждый раз менять исходник и перекомпиливать мягко говоря не удобно поэтому я и ищу метод который бы мог найти значения этих переменных в памяти компа. хм.. это ведь реально? |
Сообщ.
#5
,
|
|
|
Цитата Umbrellla90 @ метод который бы мог найти значения этих переменных в памяти компа. хм.. это ведь реально? Если у самой системы нету таких методов, то безопасных способов нет. И, да просто сканируя память ты вряд-ли чего найдешь (если у данной структуры нет уникальной сигнатуры). |
Сообщ.
#6
,
|
|
|
Я думал еще о том чтобы прочитать их один раз как только библиотека подключается и потом спокойно хранить в памяти и пользоваться когда надо, но я незнаю оптимально ли это поэтому и ищу другой способ чтобы сравнить. К примеру:
SET LIBRARY TO "..bla-bla\SV.fll" //подключу библиотеу GetAttrib(IT_SC_LENPREF,....,..) // возбму все атрибуты это будет нормально? |
Сообщ.
#7
,
|
|
|
Цитата Umbrellla90 @ Я думал еще о том чтобы прочитать их один раз как только библиотека подключается и потом спокойно хранить в памяти и пользоваться когда надо Если размер структуры IT_SC_ не слишком большой, то нормальный вариант. |
Сообщ.
#8
,
|
|
|
IT_SC_* это не структура такие имена имеют переменные в системе, большенсто символьные и их размер не больше 6 знаков..
Добавлено ладно пока остановлюсь на этом.. Всем спасибо за помощь. |
Сообщ.
#9
,
|
|
|
Если кто нибудь будет искать подобное:
NTI nti; Locator loc; Value val; nti=_NameTableIndex("Имя_Переменной"); if(nti>0&&_FindVar(nti,-1,&loc)) { if(_Load(&loc,&val)<0) { return;} //Ошибка чтения переменной ..... //В переменной val записана нужная переменная |
Сообщ.
#10
,
|
|
|
Что мешает на фоксе сохранять эти переменные в общий dbf-ник?
|