|
|
|
указатель
|
|||
|---|---|---|---|
|
#18+
Подскажите плиз. Дано: - указатель на кусок памяти gnMemPoint=312323 - переменная gcStr='тутитурумтуту' Вопрос: как значение переменной скопировать или переместить по адресу, на который ссылается gnMemPoint ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2006, 16:16 |
|
||
|
указатель
|
|||
|---|---|---|---|
|
#18+
Если версия VFP7 или старше, то используй функцию SYS(2600) - подробности в HELP Для младших версий FoxPro ищи API-функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2006, 16:22 |
|
||
|
указатель
|
|||
|---|---|---|---|
|
#18+
Гут. Санкс. From help: This function is for advanced programmers only :-) А спомощью store,?,&,@,() никак? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2006, 16:53 |
|
||
|
указатель
|
|||
|---|---|---|---|
|
#18+
Hi ппппппппппппппппппппппп! Никак. Более того прислушайся к предупреждению - ибо если без ума (не понимаю досконально что, куда и зачем помещается, какие размеры областей, какие там должны быть данные и т.п.) лазить в память - ничего хорошего из этого не выйдёт. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 22:44 |
|
||
|
указатель
|
|||
|---|---|---|---|
|
#18+
Байты они и в Африке байты. Если задана переменная, точнее выделен кусок памяти под ее значение и известен указатель на этот кусок (адрес переменной в общей куче памяти), то почему туда нельзя элементарно кинуть нужные значения, а только через sys(2600). Ничего не хочу сказать про фокс плохого, одни только восхищения, но для системных вещей к сожалению слабоват... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2006, 14:06 |
|
||
|
указатель
|
|||
|---|---|---|---|
|
#18+
пппппппппппппппппппппппБайты они и в Африке байты. Если задана переменная, точнее выделен кусок памяти под ее значение и известен указатель на этот кусок (адрес переменной в общей куче памяти), то почему туда нельзя элементарно кинуть нужные значения, а только через sys(2600). Ничего не хочу сказать про фокс плохого, одни только восхищения, но для системных вещей к сожалению слабоват... FoxPro - это прежде всего СУБД. Т.е. он "заточен" под работу с файлами DBF. Если Вам надо работать с памятью, причем именно таким "извращенным" способом, то используйте другие языки программирования именно для этого и предназначенные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2006, 15:24 |
|
||
|
указатель
|
|||
|---|---|---|---|
|
#18+
Hi ппппппппппппппппппппппп! > Байты они и в Африке байты. Естественно. > Если задана переменная, В фоксе переменные это не такие элементарные типы как в C - наиболее близкий аналог это видимо Variant. Ты же не работаешь с Variant-ами такими низкоуровневыми способами как с int или там char? > точнее выделен кусок памяти под ее значение Не только под значение, но и под описание! > и известен указатель на этот кусок (адрес переменной в общей куче памяти), В фоксе нет "указателей", причём ВООБЩЕ нет. Впрочем в .NET тоже :) Лишь в "небезопасном коде" оставлена такая лазейка. > то почему туда нельзя элементарно кинуть нужные значения, Потому что это не указатель, и потому что само значение не есть "элементарный тип". Почитай в хелпе про FoxAPI - там достаточно подробно описано как обращаться к фоксовым переменным из C-ного кода, и как побочный продукт такого описания можно получить некоторое представление о том что же есть переменные фокса, как они хранятся и т.п. > а только через sys(2600) Не только - фокс имеет и другое средство - подключение АПИ функций - при этом он сам производит большинство низкоуровневых конвертаций. Ну и упомянутое выше FoxAPI - которое как раз и предназначено для написания "системных" вещей - т.е. того что не следует делать собственно средствами фокса (и не только по причинам сложности, а зачастую по причинам производительности и другим). > Ничего не хочу сказать про фокс плохого, одни только восхищения, но для > системных вещей к сожалению слабоват... Естественно! А как же ты хотел то? Он не для того предназначен вообще-то. Ты же не станешь на 600 мерсе поле пахать, а на тракторе по ресторанам ездить :) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2006, 19:21 |
|
||
|
указатель
|
|||
|---|---|---|---|
|
#18+
*** выделяю память (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. Но отлично и органично их дополняющий в качестве клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2006, 16:30 |
|
||
|
указатель
|
|||
|---|---|---|---|
|
#18+
*** выделяю память (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. Но отлично и органично их дополняющий в качестве клиента. Ну это мы и так знаем. И что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2006, 16:47 |
|
||
|
указатель
|
|||
|---|---|---|---|
|
#18+
Одни эмоции. Никого не хотел задеть... > Для выделяемых вами 100 байт - может тип и не важен. Для определения размера того, что вы туда хотите затолкать с помощью set - очень даже важен. размер 100 байт, например, Str='111'+space(97) ? len(Str) 100 > Вам уже указали на sys(2600). Что не нравится? А что в нее микрософт засунул? Наверное, что-то очень сверхестественное, позволяющее, поганить память как вздумается. Сдается, что все теже указатели, с которыми сам фокс работает во всю, а програмеру данная возможность обрезана. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2006, 17:13 |
|
||
|
указатель
|
|||
|---|---|---|---|
|
#18+
Батенька, Вам уже достаточно прозрачно намекали, что переменная фокса и переменная в каком-то другом языке программирования - две очень большие разницы. И размещаются в памяти они совсем не так как Вы, судя по вашим здесь письменам, думаете. В частности, строковая переменная Str длиной 100 байт на самом деле занимает несколько больше памяти и сами символы этой строки находятся совсем не там, куда указывает указатель на переменную Str. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2006, 17:43 |
|
||
|
указатель
|
|||
|---|---|---|---|
|
#18+
И все-таки вы в чем-то сильно заблуждаетесь. В любом языке, помимо самого значения переменной, где-то в памяти храниться хотя бы ее название, неговоря уже об указателе. Эти прописные истины объяснять излишне. Но что вы вцепились в переменную, важно только ее значение. -------------------------------------------------- Str=space(100) ? len(Str) 100 байт -------------------------------------------------- FWRITE(nFileHandle, Str, 100) ? SIZE(cFileName) 100 байт -------------------------------------------------- или вы глазам своим не верите? ...считаю разговор завершенным из-за отсутствия конструктива. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2006, 18:30 |
|
||
|
указатель
|
|||
|---|---|---|---|
|
#18+
И все-таки вы в чем-то сильно заблуждаетесь. Ну, кто из нас заблуждается еще надо выяснить. В любом языке, помимо самого значения переменной, где-то в памяти храниться хотя бы ее название, неговоря уже об указателе. Эти прописные истины объяснять излишне. Однако, какая уверенность! :) Прямо в любом? И точно есть название? И не укажете мне, темному, где хранятся названия переменных в откомпилированном с исходника, например, на С файле? И еще ссылочку на упомянутые прописные истины если не трудно. Надо же просвещаться. Но что вы вцепились в переменную, важно только ее значение. -------------------------------------------------- Str=space(100) ? len(Str) 100 байт -------------------------------------------------- FWRITE(nFileHandle, Str, 100) ? SIZE(cFileName) 100 байт -------------------------------------------------- или вы глазам своим не верите? Переменная и ее значение - опять две большие разницы. ...считаю разговор завершенным из-за отсутствия конструктива Еще раз напоминаю: фокс не язык общего применения, в нем нет адресной арифметики и нет прямого доступа к памяти. Не предназначен он для этого. Про sys(2600) уже упоминалось. Можете пользоваться, можете не пользоваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2006, 18:48 |
|
||
|
указатель
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 02:48 |
|
||
|
указатель
|
|||
|---|---|---|---|
|
#18+
...а как в Foxpro задекларировать и вызвать функцию MoveMemory? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2006, 15:25 |
|
||
|
указатель
|
|||
|---|---|---|---|
|
#18+
Так-же как и любую другую АПИ функцию. DECLARE RtlMoveMemory IN WIN32API INTEGER, INTEGER, INTEGER RtlMoveMemory(0x10000,0x10001,1) Только ещё раз предупреждаю - не зная броду не лезь в воду! Если уж найти декларацию этой функции не смог, то более чем вероятно, что правильно её использовать ты тоже не сможешь - а неправильное использование такой функции в лучшем случае приведёт к быстрому падению программы со всеми вытекающими... Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2006, 23:50 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33730849&tid=1591634]: |
0ms |
get settings: |
12ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
37ms |
get forum data: |
4ms |
get page messages: |
105ms |
get tp. blocked users: |
2ms |
| others: | 212ms |
| total: | 461ms |

| 0 / 0 |
