Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / указатель / 16 сообщений из 16, страница 1 из 1
05.05.2006, 16:16
    #33710843
указатель
Подскажите плиз.

Дано:

- указатель на кусок памяти gnMemPoint=312323
- переменная gcStr='тутитурумтуту'

Вопрос:

как значение переменной скопировать или переместить по адресу,
на который ссылается gnMemPoint
...
Рейтинг: 0 / 0
05.05.2006, 16:22
    #33710879
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель
Если версия VFP7 или старше, то используй функцию

SYS(2600) - подробности в HELP

Для младших версий FoxPro ищи API-функции.
...
Рейтинг: 0 / 0
05.05.2006, 16:53
    #33711023
указатель
Гут. Санкс.

From help: This function is for advanced programmers only :-)

А спомощью store,?,&,@,() никак?
...
Рейтинг: 0 / 0
10.05.2006, 22:44
    #33719047
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель
Hi ппппппппппппппппппппппп!

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

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
11.05.2006, 14:06
    #33720403
указатель
Байты они и в Африке байты.
Если задана переменная, точнее выделен кусок памяти под ее значение и известен указатель на этот кусок (адрес переменной в общей куче памяти),
то почему туда нельзя элементарно кинуть нужные значения, а только через sys(2600). Ничего не хочу сказать про фокс плохого, одни только восхищения, но для системных вещей к сожалению слабоват...
...
Рейтинг: 0 / 0
11.05.2006, 15:24
    #33720689
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель
пппппппппппппппппппппппБайты они и в Африке байты.
Если задана переменная, точнее выделен кусок памяти под ее значение и известен указатель на этот кусок (адрес переменной в общей куче памяти),
то почему туда нельзя элементарно кинуть нужные значения, а только через sys(2600). Ничего не хочу сказать про фокс плохого, одни только восхищения, но для системных вещей к сожалению слабоват...
FoxPro - это прежде всего СУБД. Т.е. он "заточен" под работу с файлами DBF.

Если Вам надо работать с памятью, причем именно таким "извращенным" способом, то используйте другие языки программирования именно для этого и предназначенные.
...
Рейтинг: 0 / 0
14.05.2006, 19:21
    #33725540
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель
Hi ппппппппппппппппппппппп!

> Байты они и в Африке байты.

Естественно.

> Если задана переменная,

В фоксе переменные это не такие элементарные типы как в C - наиболее близкий
аналог это видимо Variant. Ты же не работаешь с Variant-ами такими
низкоуровневыми способами как с int или там char?

> точнее выделен кусок памяти под ее значение

Не только под значение, но и под описание!

> и известен указатель на этот кусок (адрес переменной в общей куче памяти),

В фоксе нет "указателей", причём ВООБЩЕ нет. Впрочем в .NET тоже :) Лишь в
"небезопасном коде" оставлена такая лазейка.

> то почему туда нельзя элементарно кинуть нужные значения,

Потому что это не указатель, и потому что само значение не есть
"элементарный тип". Почитай в хелпе про FoxAPI - там достаточно подробно
описано как обращаться к фоксовым переменным из C-ного кода, и как побочный
продукт такого описания можно получить некоторое представление о том что же
есть переменные фокса, как они хранятся и т.п.

> а только через sys(2600)

Не только - фокс имеет и другое средство - подключение АПИ функций - при
этом он сам производит большинство низкоуровневых конвертаций. Ну и
упомянутое выше FoxAPI - которое как раз и предназначено для написания
"системных" вещей - т.е. того что не следует делать собственно средствами
фокса (и не только по причинам сложности, а зачастую по причинам
производительности и другим).

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

Естественно! А как же ты хотел то? Он не для того предназначен вообще-то. Ты
же не станешь на 600 мерсе поле пахать, а на тракторе по ресторанам ездить
:)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
16.05.2006, 16:30
    #33730390
указатель
*** выделяю память (100 байт)
H=GlobalAlloc(100) && дескриптор выделенной памяти
P=GlobalLock(H) && указатель на выделенную память

*** освобождаю использованную память
GlobalUnlock(H) && освобождение захваченной памяти
GlobalFree(H) && освобождение захваченной памяти

Что Вас пугает, что тут противоестественного или извращенческого?
Что здесь некорректного, сама система, своими средствами выделяет 100 байт свободной памяти под конкретное приложение?
Причем тут типы? Тип важен для трактора, на котором в ресторан :-), ежели на кировце, то почему бы нет, полюбому круче хамера смотрится.
А тут тип один - 800 единичек и нулей.

Две элементарные задачи:
1. записать значение битика, находящегося по адресу Р+offset (offset=0,..,800)
2. считать любой битик по адресу Р+offset (offset=0,..,800)

Считаете, что задачка не имеет право на существование?

PS. FoxPro в настоящее время скорее продвинутый клиент, значительно уступающий настоящим СУБД, например SQL-Server.
Но отлично и органично их дополняющий в качестве клиента.
...
Рейтинг: 0 / 0
16.05.2006, 16:47
    #33730458
Проходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель
*** выделяю память (100 байт)
H=GlobalAlloc(100) && дескриптор выделенной памяти
P=GlobalLock(H) && указатель на выделенную память

*** освобождаю использованную память
GlobalUnlock(H) && освобождение захваченной памяти
GlobalFree(H) && освобождение захваченной памяти

Это Вы в фоксовом хелпе нашли?

Что Вас пугает, что тут противоестественного или извращенческого?

Пугает неправильное применение инструмента.

Что здесь некорректного, сама система, своими средствами выделяет 100 байт свободной памяти под конкретное приложение?
[quot]
Какая система? Оперционная или фокс? У фокса есть и свой менеджер памяти.
[quot]
Причем тут типы? Тип важен для трактора, на котором в ресторан :-), ежели на кировце, то почему бы нет, полюбому круче хамера смотрится.
А тут тип один - 800 единичек и нулей.

Для выделяемых вами 100 байт - может тип и не важен. Для определения размера того, что вы туда хотите затолкать с помощью set - очень даже важен.

Две элементарные задачи:
1. записать значение битика, находящегося по адресу Р+offset (offset=0,..,800)
2. считать любой битик по адресу Р+offset (offset=0,..,800)

Вам уже указали на sys(2600). Что не нравится? К тому же, это 'элементарная' задача для языков общего пользования, к коим фокс не относится. Опять неправильное применение инструмента.

Считаете, что задачка не имеет право на существование?

Задача право на существование имеет. И это оправдывает некорректное использование инструмента?

PS. FoxPro в настоящее время скорее продвинутый клиент, значительно уступающий настоящим СУБД, например SQL-Server.
Но отлично и органично их дополняющий в качестве клиента.

Ну это мы и так знаем. И что?
...
Рейтинг: 0 / 0
16.05.2006, 17:13
    #33730543
указатель
Одни эмоции. Никого не хотел задеть...

> Для выделяемых вами 100 байт - может тип и не важен. Для определения размера того, что вы туда хотите затолкать с помощью set - очень даже важен.

размер 100 байт, например, Str='111'+space(97)
? len(Str)
100

> Вам уже указали на sys(2600). Что не нравится?

А что в нее микрософт засунул? Наверное, что-то очень сверхестественное, позволяющее, поганить память как вздумается. Сдается, что все теже указатели, с которыми сам фокс работает во всю, а програмеру данная возможность обрезана.
...
Рейтинг: 0 / 0
16.05.2006, 17:43
    #33730655
Проходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель
Батенька, Вам уже достаточно прозрачно намекали, что переменная фокса и переменная в каком-то другом языке программирования - две очень большие разницы. И размещаются в памяти они совсем не так как Вы, судя по вашим здесь письменам, думаете. В частности, строковая переменная Str длиной 100 байт на самом деле занимает несколько больше памяти и сами символы этой строки находятся совсем не там, куда указывает указатель на переменную Str.
...
Рейтинг: 0 / 0
16.05.2006, 18:30
    #33730802
указатель
И все-таки вы в чем-то сильно заблуждаетесь. В любом языке, помимо самого значения переменной, где-то в памяти храниться хотя бы ее название, неговоря уже об указателе. Эти прописные истины объяснять излишне.
Но что вы вцепились в переменную, важно только ее значение.

--------------------------------------------------
Str=space(100)
? len(Str)

100 байт
--------------------------------------------------
FWRITE(nFileHandle, Str, 100)
? SIZE(cFileName)

100 байт
--------------------------------------------------

или вы глазам своим не верите?

...считаю разговор завершенным из-за отсутствия конструктива.
...
Рейтинг: 0 / 0
16.05.2006, 18:48
    #33730849
Проходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель
И все-таки вы в чем-то сильно заблуждаетесь.

Ну, кто из нас заблуждается еще надо выяснить.

В любом языке, помимо самого значения переменной, где-то в памяти храниться хотя бы ее название, неговоря уже об указателе. Эти прописные истины объяснять излишне.

Однако, какая уверенность! :) Прямо в любом? И точно есть название? И не укажете мне, темному, где хранятся названия переменных в откомпилированном с исходника, например, на С файле? И еще ссылочку на упомянутые прописные истины если не трудно. Надо же просвещаться.

Но что вы вцепились в переменную, важно только ее значение.

--------------------------------------------------
Str=space(100)
? len(Str)

100 байт
--------------------------------------------------
FWRITE(nFileHandle, Str, 100)
? SIZE(cFileName)

100 байт
--------------------------------------------------

или вы глазам своим не верите?

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

...считаю разговор завершенным из-за отсутствия конструктива
Еще раз напоминаю: фокс не язык общего применения, в нем нет адресной арифметики и нет прямого доступа к памяти. Не предназначен он для этого. Про sys(2600) уже упоминалось. Можете пользоваться, можете не пользоваться.
...
Рейтинг: 0 / 0
17.05.2006, 02:48
    #33731304
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель
Hi ппппппппппппппппппппппп!

> *** выделяю память (100 байт)
> H=GlobalAlloc(100) && дескриптор выделенной памяти
> P=GlobalLock(H) && указатель на выделенную память
> *** освобождаю использованную память
> GlobalUnlock(H) && освобождение захваченной памяти
> GlobalFree(H) && освобождение захваченной памяти

Замечательно! Даже если отвлечься от того что Global* равно как и Local* не
рекомендуются к использованию на 32 разрядных платформах, там лучше Heap
использовать.

> Что Вас пугает, что тут противоестественного или извращенческого?

Всё замечательно! НО с чего же это вы решили, что фоксовая переменная
(положим для простоты что это переменная строкового типа) является аналогом
указателя? Т.е. является по сути адресом? Она НЕ является адресом. Более
того, само "содержимое" этой переменной (те самые 100 байт) не зафиксировано
где-то в памяти, а может перемещаться средой исполнения фокса по мере
необходимости!

> Причем тут типы?

Ну батенька вам тогда в библиотеку надобно и читать книжки умные. Я то думал
что хоть с C вы хорошо знакомы...

> Две элементарные задачи:
> 1. записать значение битика, находящегося по адресу Р+offset
> (offset=0,..,800)
> 2. считать любой битик по адресу Р+offset (offset=0,..,800)

Замечательно - но при чём тут фоксовая переменная содержащая строку???

> Считаете, что задачка не имеет право на существование?

Каждая задача решается подходящими для этого средствами. Для записи в память
(используя адреса aka указатели) используются функции типа SYS(2600) или
АПИшные функции - например MoveMemory, FillMemory... Или даже CRT-ные
функции - используя Сишный рантайм - той версии на которой сам фокс
написан...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
18.05.2006, 15:25
    #33736011
.
.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель
...а как в Foxpro задекларировать и вызвать функцию MoveMemory?
...
Рейтинг: 0 / 0
21.05.2006, 23:50
    #33741390
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель
Так-же как и любую другую АПИ функцию.

DECLARE RtlMoveMemory IN WIN32API INTEGER, INTEGER, INTEGER
RtlMoveMemory(0x10000,0x10001,1)

Только ещё раз предупреждаю - не зная броду не лезь в воду! Если уж найти
декларацию этой функции не смог, то более чем вероятно, что правильно её
использовать ты тоже не сможешь - а неправильное использование такой функции
в лучшем случае приведёт к быстрому падению программы со всеми
вытекающими...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / указатель / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]