Форум » [x]Harbour » блок кода » Ответить

блок кода

MIKHAIL: Можно ли транслировать и сохранять в символьном виде блок кода ?

Ответов - 3

Pasha: Верно наоборот: строковый макрос можно транслировать в блок кода Function GetBlock(cMacro, cPar) Return &('{|' + if(cPar#nil,cPar,'') + '|' + AllTrim(cMacro) + '}') Поскольку в общем случае блок кода может содержать локальные переменные, то транслировать его в строку нельзя.

SergKis: Еще http://clipper.borda.ru/?1-4-0-00001016-000-0-0-1417123753

SergKis: Может такой путь ? ( http://www.kresin.ru/hrbfaq_3.html#Doc12 ) [pre2] Три функции, использующие встроенный компилятор (hbcplr.lib), основанный на том же коде, что и сам harbour.exe. nRetCode := hb_compile( "harbour", cFileName, [...] ) Компилирует файл cFileName с переданными ей параметрами компиляции. Результатом ее работы является .c файл. cHrb := hb_compileBuf( "harbour", cFileName, [...] ) В отличие от hb_compile(), не создает .c файл, а возвращает созданный в результате компиляции p-code в виде текстовой строки, который можно сохранить как hrb файл или исполнить с помощью hb_hrbRun() cHrb := hb_compileFromBuf( cPrg, "harbour", [...] ) Компилирует код из буфера cPrg, возвращает p-code, как и hb_compileBuf() Ниже приведен пример использования run-time компиляции: FUNCTION Main( cFileName ) Local handle, buf, cBuf := "", i buf := hb_compilebuf( "harbour", cFileName, "/n","/w" ) // Компилируем hb_hrbRun( buf ) // исполняем handle := FCreate( Iif((i:=Rat('.',cFileName))=0,cFileName,Substr(cFileName,1,i-1)) + ".hrb" ) FWrite( handle, buf ) FClose( handle ) Return Nil [/pre2]




полная версия страницы