PureBasic - урок, указатели
Повторете ; Основен цикъл на програмата Event= WaitWindowEvent () ; Вземете идентификатора на събитието в програмата До събитие= #PB_Event_CloseWindow ; Прекъснете цикъла, ако трябва да затворите прозорец
Използвайки указатели, можете да върнете повече от един резултат от процедура, без да използвате глобални променливи. Следващият пример демонстрира това.
Тестова процедура ( *var1 , *var2 ) PokeL ( *var1 , 12345678) ; Записване на число в паметта PokeS ( *var2 , "Низ от текст" ) ; Запишете текст в паметта EndProcedure
var.l=0 Text.s= Интервал (100) ; Запазване на данни в низова променлива чрез запис на 100 интервала Тест ( @var , @Text ); Извикваме процедурата и й предаваме указатели към променливите var и Text ; Показваме данни от променливи в прозореца за отстраняване на грешки. Променлива за отстраняване на грешки Текст за отстраняване на грешки
При инициализиране на променливи числото 0 се записва във var и 100 интервала се записват в низовата променлива Text, т.е. паметта е запазена. След това се извиква процедурата Test, на която се подават указатели към тези променливи. Процедурата записва данни в тези променливи и работи с тях като с памет. И в края на програмата, използвайки оператора Debug, прозорецът за отстраняване на грешки показва данните от тези променливи.
Но е много по-удобно да работите със структури, защото не е необходимо да използвате функции за достъп до паметта.
Структура Proba x.l y.l Text.s EndStructure
test.Proba ; Декларация на структурата
Тестова процедура ( *var . Proba ) *var \ x =1 *var \ y =2 *var \ Text = "Текст" EndProcedure
Тест ( @test ); Извикваме процедурата и й предаваме указател към структурата ; Показване на данни от структурата Тест за отстраняване на грешки \ x Тест за отстраняване на грешки \ y Тест за отстраняване на грешки \ Текст в прозореца за отстраняване на грешки
Следващият пример показва как можете да поставите икона в изпълним файл и да я използвате в програма.
; Отворете прозорец OpenWindow(1,0,0,80,80,"", #PB_Window_MinimizeGadget #PB_Window_ScreenCentered ) CreateGadgetList ( WindowID (1)) ; Създайте нов списък с притурки
CatchImage (1, ?Metka1 , ?Metka2 - ?Metka1 ) ; Зареждане на изображение от паметта ImageGadget (2,40,20,32,32, ImageID (1) ) ; Показвайки го
Повторете ; Начало на главния цикъл Repeat-Until Event= WaitWindowEvent () ; Вземете текущото събитие ID ; Прекъсване на цикъла при опит за затваряне на прозореца (щракване върху кръстчето в заглавието на прозореца) До събитие= #PB_Event_CloseWindow Край ; Завършване на програмата
DataSection Metka1 : IncludeBinary "Icon.ico" Metka2 : EndDataSection
Компилираната програма и нейният изходен код могат да бъдат изтеглени тук.