есть адрес буфера, хочу использовать его в виде

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Может кто знает, как превратить LONG,ULONG - адрес буфера, полученный от (_maloc,LocalAlloc,HeapAlloc) в полнофункциональный &CSTRING

вот такая конструкция работает на чтение великолепно:

Код: Выделить всё

loc_Str  &CSTRING
  CODE
 loc_Str &= (malloc(100))
! любыми APIшными средствами скопировали туда что то (strcpy....)

 MESSAGE(loc_Str) ! Отлично показывавет что туда предварительно занесли

MESSAGE(loc_Str[2 : 4]) ! Тоже отлично показывает

 loc_Str = 'Hello!!!'
MESSAGE(loc_Str) ! присвоения не произошло
конечно можно сказать что присваивай только APIшными стредствами в таком подходе, да вот беда, если я хочу задействовать данный &CSTRING как выходной параметр в любую клашину процедуру (BUILTINS.CLW, ну например FILEDIALOG), присвоения не происходит.

Andrew Myalin
andrew@arsis.ru
http://mavcla.arsis.ru (MAV Direct ODBC)
ICQ: 10659412
Yahoo group: clarion@yahoogroups.com

(Добавление)

Код: Выделить всё

Loc:StrGroup Group,Over(Loc:Str)
Addr          Ulong 
Size          Ulong 
              End       

   CODE

Loc:StrGroup.Addr = malloc(100)
Loc:StrGroup.Size = 100 
---------------------------------------
C уважением,
Юрий Философов,
Главный программист
Корпорация "Диполь", Саратов
E-mail yufil@tacis-dipol.ru (служ)
yufil@mail.ru (дом)
ICQ#75924439
Написал: ClaList(2)
Гость

Сообщение Гость »

loc_Str = 'Hello!'
message(loc_Str)

GPF! ;(

C5

Andrew Myalin

Тэк-с, читаем и перечитываем письма Олега Руденко :)) Так сказать, по мотивам:

Код: Выделить всё

  PROGRAM
  MAP
    MODULE('Clarion RTL')
      StrLen  (ULONG pcString),UNSIGNED,NAME('_strlen'),DLL(dllmode)
      Malloc  (UNSIGNED mem_size),ULONG,NAME('_malloc'),DLL(dllmode)
    END
  END

RefGrp      GROUP
pCStr         &CSTRING
            END

PtrGrp      GROUP,OVER(RefGrp)
Ptr           LONG
Size          LONG
            END

Loc:Str     &CSTRING

  CODE
  PtrGrp.Size = 100
  PtrGrp.Ptr  = Malloc(PtrGrp.Size)
  IF PtrGrp.Ptr
     ! Все нормально
     Loc:Str &= RefGrp.pCStr

     Loc:Str = 'Проверка'
     MESSAGE(Loc:Str)
  END
Удачи!
__________________________________
Владимир Якимченко (ICQ: 16993194)
Написал: ClaList(2)
Ответить