|
Zadeklarowany w: be/kernel/image.h
Biblioteka: libroot.so
Streszczenie: więcej...
To nie jest o grafice. Obraz jest skomplilowanym kodem, którego istnieją trzy typy: obrazy aplikacji, obrazy bibliotek i obrazy wtyczek. Obraz aplikacji jest kodem wykonywalnym, który może być odpalany (uruchamiany). Obraz biblioteki jest kolekcją kodu współdzielonego, który przyłączasz do aplikacji gdy kompilujesz swoją aplikację. Obraz wtyczki jest kodem, który aplikacja może ładować i który działa gdy aplikacja jest uruchomiona. Zauważ, że wytczka może być również aplikacją; innymi słowy możesz tworzyć obraz, który może być uruchamiany przez samego siebie lub który może być ładowany do innej aplikacji.
Aby zdobyć więcej informacji o tworzeniu i używaniu obrazów, popatrz do rozdziału "Pojęcia obrazów".
![]() | get_image_info() , get_next_image_info() , image_info |
status_t get_image_info(image_id image, image_info *info) status_t get_next_image_info(team_id team,
int32 *cookie,
image_info *info)struct {} image_info Te funkcje kopiują strukturę image_info do argumentu info dla indywidualnego obrazu. Funkcja get_image_info() podaje informację dla obrazu identyfikowanego przez argument image.
Funkcja get_next_image_info() pozwala Ci kroczyć poprzez listę obrazów zespołu dzięki kolejno powtarzanym wywołaniom. Argument team identyfikuje zespół do którego chcesz zaglądnąć; wartość team równa 0 oznacza zespół wywoływanego wątku. Argument cookie jest znacznikiem miejsca; ustawiasz go na 0 przy pierwszym wywołaniu i pozwalasz funkcji wykonać resztę. Funkcja zwraca wartość równą B_BAD_VALUE gdy nie ma więcej obrazów do odwiedzenia:
/* Uzyskaj image_info dla każdego obrazu w tym zespole. */
image_info info;
int32 cookie = 0;
while (get_next_image_info(0, &cookie, &info) == B_OK)
...Strukturą image_info jest:
typedef struct {
image_id id;
image_type type;
int32 sequence;
int32 init_order;
B_PFV init_routine;
B_PFV term_routine;
dev_t device;
ino_t node;
char name[MAXPATHLEN];
void *text;
void *data;
int32 text_size;
int32 data_size;
} image_infoPolami są:
- id. Numer image_id obrazu.
- type. Stała (wymieniona poniżej), która mówi czy to jest obraz aplikacji, biblioteki czy wtyczki.
- sequence i init_order. Są to rozpoczynające się od zera liczby porządkowe, które podają kolejność w której obrazy były ładowane i inicjalizowane, w porównaniu do wszystkich innych obrazów w zespole.
- init_routine i term_routine. Są to wskaźniki do funkcji, które są używane do inicjalizowania i zakańczania obrazu (more specifically, the image's main thread). Typ B_PFV jest obudową dla wskaźnika do funkcji (void*).
- device. Urządzenie, które na którym znajdujesię ten plik obrazu.
- node. Numer węzła pliku obrazu.
- name. Pełna scieżka dostępu do pliku skąd pochodzi obraz.
- text i text_size. Adres i wielkość (w bajtach) segmentów tekstu obrazu.
- data i data_size. Adres i wielkość segmentu danych obrazu.
Oczywistymi stałymi image_type są :
Stałe image_type B_APP_IMAGE B_LIBRARY_IMAGE B_ADD_ON_IMAGE ZWRACANE KODY
- B_OK. Obraz został znaleziony; info zawiera poprawną informację.
- B_BAD_VALUE. image nie identyfikuje istniejącego obrazu, team nie identyfikuje istniejącego zespołu lub nie ma więcej obrazów do odwiedzenia.
![]() | get_image_symbol() , get_nth_image_symbol() |
status_t get_image_symbol(image_id image,
char *symbol_name,
int32 symbol_type,
void **location)status_t get_nth_image_symbol(image_id image,
int32 n,
char *name,
int32 *name_length,
int32 *symbol_type,
void **location)get_image_symbol() zwraca, w miejscu location, wskaźnik do adresu symbolu, który jest identyfikowany przez argumenty image, symbol_name i symbol_type. Przykład demostrujący użycie tej funkcji jest dany w rozdziale "Symbole."
get_nth_image_symbol() zwraca informację o n'tym symbolu w danym obrazie. Informacjajest zwracana w argumentach:
- name jest nazwą symbolu. Musisz przydzielić buforname zanim go przekażesz - funkcja kopiuje nazwę do bufora.
- Wskazujesz name_length jako liczbę całkowitą, która podaje długość bufora name, który przekazujesz. Funkcja używa tej wartośći do obcięcia łańcucha znaków, który jest kopiowany do name. Funkcja resetuje wtedy name_length do pełnej (nieobciętej) nazwy symbolu (plus jeden bajt aby łańcuch znaków zakończyć znakiem NULL). Aby zapewnić, że otrzymałeś pełną nazwe symbolu, powinieneś porównać wartość pochodzacą z name_length z wartością, którą ustawia funkcja. Jeśli wartość przychodząca jest mniejsza niż pełna długość, możesz wtedy ponownie wywołać get_nth_image_symbol() z odpowiednio wydłużonym buforem name i zwiększyć wartość name_length.
Pamiętaj, że name_length jest resetowany za każdym razem gdy wywołujeszget_nth_image_symbol(). Jeśli wywołujesz funkcję w sposób powtarzający się (to retrieve all the symbols in an image), potrzebujesz zresetować wartość name_length pomiędzy wywołaniami.
- Funkcja ustawia argument symbol_type na B_SYMBOL_TYPE_DATA jeśli symboll jest zmienną, B_SYMBOL_TYPE_TEXT jeśli symbol jest funkcją lub B_SYMBOL_TYPE_ANY jeśli format wykonywalny nie jest rozróżniany pomiędzy tymi dwoma. Wartość argumentu wchodzącego do funkcji nie ma żadnego skutku.
- Funkcja ustawia location do wskazywania na adres symbolu.
Aby uzyskać numery image_id na których te funkcje operują, użyj funkcji get_next_image_info(). Takie numery identyfikacyjne są również zwracane bezpośrednio gdy ładujesz obraz wtyczki poprzez funkcję load_add_on().
ZWRACANE KODY
- B_OK. Symbol został znaleziony.
- B_BAD_IMAGE_ID. image nie identyfikuje istniejącego obrazu.
- B_BAD_INDEX. n jest poza zakresem.
![]() | load_add_on() , unload_add_on() |
image_id load_add_on(const char *pathname) status_t unload_add_on(image_id image) load_add_on() ładuje obraz wtyczki, identyfikowany przez pathname, do przestrzeni adresowej Twojej aplikacji.
- pathname może być ścieżką absolutną lub względną; jeśli jest względna, jest wyznaczana poza ścieżką podstawową określoną przez zmienną środowiskową ADDON_PATH.
- Funkcja zwraca image_id (watość całkowita dodatnia), która reprezentuje załadowany obraz. Numery identyfikacyjne obrazu (ID) są unikalne w całym systemie.
Przykład, który demonstruje użycie load_add_on() jest podany w rozdziale "Ładowanie obrazu wtyczki."
Możesz załadować ten sam obraz wtyczki dwa razy; za każdym razem ładuje nową wtyczkę, jest tworzony i zwracany unikalny numer image_id.
unload_add_on() usuwa obraz wtyczki identfikowany przez argument. Symbole obrazu są usuwane a pamięć, która je reprezentuje jest zwalniana. Jeśli argument nie identyfikuje prawidłowego obrazu, funkcja zwraca wartość równą B_ERROR. W przeciwnym wypadku zwraca ona B_OK.
ZWRACANE KODY
Dopdatnia wartość image_id value (ładowanie) lub
![]() | load_image() |
thread_id load_image(int argc,
const char **argv,
const char **env)Ładuje obraz aplikacji do systemu (nie ładuje ona obrazu do przestrzeni adresowej tego, który ją wywołuje), tworzy oddzielny zespół dla nowej aplikacji i zapoczątkowuje i zwraca identyfikator głównego wątku zespołu. Obraz jest identyfikowany przez nazwę ścieżki dostępu daną w argv[0].
Argumenty sa przekazywane do funkcji main() (są one widoczne tam w górze jak podobnie nazwane argumenty funkcji):
- argc podaje liczbę wejść, jakie są w tablicy argv.
- Pierwszy łańcuch znaków w argv musi być nazwą pliku obrazu. Nastęnie instalujesz (wprowadzasz - przyp. tłum.) inne argumenty, które chcesz w tablicy i kończysz tablicę wprowadzeniem znaku NULL. Zauważ, że wartość argc nie powinna uwzględniać znacznika NULL kończącego łańcuch znaków w tablicy argv.
- envp jest tablicą zmiennych środowiskowych, które są również przekazywane do main(). Zwykle, używasz globalnego wskaźnika environ:
extern char **environ;
load_image(..., environ);The argv and envp arrays are copied into the new thread's address space. If you allocated either of these arrays, it's safe to free them immediately after load_image() returns.
Wątek, ktory jest zwrócony przez load_image() jest w stanie zawieszenia. Aby rozpocząć działanie wątku przekaż thread_id do resume_thread() lub wait_for_thread().
Przykład, który demonstruje użycie load_image() jest dany w "Ładowanie obrazu aplikacji."
ZWRACANE KODY
- Wartości całkowite dodatnie. Powodzenie.
- B_ERROR. Niepowodzenie, z jakiegokolwiek powodu.
|
Be
Book,
...w ślicznym HTML...
dla BeOS wydanie 5
Copyright © 2000 Be, Inc. Wszelkie prawa zastrzeżone.