Bir HIDL arayüzündeki işlevler, otomatik olarak oluşturulan
IFoo
C++ sınıfı bildirimi. Her işlevin adı
C++'ta aynıdır; Aşağıdaki bölümlerde HIDL bağımsız değişkenlerinin ve
değerleri C++ diline çevrilir.
İşlev parametreleri
.hal
dosyasında listelenen bağımsız değişkenler C++ veri türleriyle eşlenir.
Temel bir C++ türüyle eşlenmeyen bağımsız değişkenler const tarafından iletilir
bir referans noktası olarak kabul edilir.
Döndürülen değeri olan (generates
olan) her HIDL işlevi için
ifadesiyle birlikte), söz konusu işlevin C++ parametre listesinde ek bir bağımsız değişken vardır:
HIDL işlevinin döndürülen değerleriyle çağrılan bir geri çağırma işlevi.
Bir istisna vardır: generates
koşulu
doğrudan bir C++ temel bileşeni, geri çağırma ile eşlenen tek bir parametre içerir
elision kullanılır (geri çağırma kaldırılır ve döndürülen değer
normal bir return
deyimiyle işlevden döndürülmesi gerekir.)
İşlev dönüş değerleri
Aşağıdaki işlevlerin dönüş değerleri var.
Taşıma hataları ve iade türü
generates
ifadesi, üç tür işlevle sonuçlanabilir
imzalar:
- Yalnızca C++ temel öğesi olan bir döndürülen değer için
generates
işlevinden elde edilen değer,Return<T>
nesne algılandı. - Daha karmaşık durumlarda
generates
değeri işlev çağrısının kendisiyle birlikte sağlanan geri çağırma parametresi aracılığıyla döndürülür. ve işlevReturn<void>
değerini döndürür. generates
ifadesi olmadığında işlev,Return<void>
.
RPC çağrıları zaman zaman aktarım hatalarıyla (ör. sunucu ne zaman
Ulaşım kaynakları aramayı tamamlamak için yeterli olmadığında ya da
iletilen parametreler aramanın tamamlanmasına izin vermiyordur (örneğin,
gerekli geri çağırma işlevi) kullandığınızdan emin olun. Return
nesne deposu aktarım hatası
bir T
değeri (
Return<void>
).
İstemci tarafı ve sunucu tarafı işlevleri aynı imzaya sahip olduğundan
sunucu tarafı işlevi bir Return
türü döndürmelidir
uygulanması aktarım hatalarına işaret etmez. Return<T>
.
nesneler Return(myTValue)
ile oluşturulur (veya dolaylı olarak
mTValue
parametresinden oluşturulmuştur (örneğin, return
)
ifadeleri) ve Return<void>
nesne
Void()
.
Return<T>
nesne arasında örtülü dönüşüm var
T
değeri. Return
nesnesinin içerip içermediği kontrol edilebilir
aktarım hatalarının isOk()
yöntemini çağırarak. Bu kontrol
zorunlu; bununla birlikte, bir hata oluşursa ve
Return
nesne kaldırıldı veya T
değer dönüşümü kaldırıldı
istemci işlemi sonlandırılır ve bir hata kaydedilir. Eğer
isOk()
, aktarım hatasını veya mantık nedeniyle yaşanan bir arama hatasını gösteriyor
geliştirici kodunda hata (nullptr
öğesini eşzamanlı olarak iletme gibi)
geri çağırma), ardından description()
nesnesine Geri dön işlevinde
günlük kaydına uygun bir dize döndürür. Bu tür durumlarda,
sonucunda, sunucuda ne kadar kodun yürütülebileceğini
başarısız çağrı. isDeadObject()
yöntemi de sağlanır. Bu
yöntemi, !isOk()
işlevinin uzak nesnenin
kilitlendi veya artık mevcut değil. isDeadObject()
her zaman anlamına gelir
!isOk()
.
Değere göre döndürme
generates
ifadesi tek bir C++ temel öğesine eşleniyorsa hayır
geri çağırma parametresi, parametre listesindedir. Bunun yerine bir uygulama
Return<T>
nesnesinde T
değerini döndürür.
T
temel türünden dolaylı olarak oluşturulabilir. Örneğin,
örnek:
Return<uint32_t> someMethod() { uint32_t return_data = ...; // Compute return_data return return_data; };
Return<*>::withDefault
yöntemi de sağlanır. Bu
yöntemi, döndürülen değerin !isOk()
olduğu durumlarda bir değer sağlar.
Bu yöntem ayrıca, döndürme nesnesini otomatik olarak uygun şekilde işaretler.
iptal edilmez.
Geri çağırma parametresini kullanarak geri dön
Geri çağırma, HIDL işlevinin döndürülen değerini arayana geri iletebilir.
Geri çağırma prototipi, std::function
C++ ile eşlenen parametreler (generates
ifadesinden alınır)
bulunur. Döndürülen değer geçersizdir. Geri çağırmanın kendisi bir değer döndürmez.
Geri çağırma parametresine sahip bir C++ işlevinin döndürülen değeri şu türde olmalıdır:
Return<void>
Sunucu uygulaması yalnızca
geri dönüşüm değerini sağlamalısınız. Döndürülen değerler zaten aktarıldığından
geri çağırma kullanıldığında T
şablon parametresi void
olur:
Return<void> someMethod(someMethod_cb _cb);
Sunucu uygulamaları, C++ uygulamasından
Bu, Void()
değeri döndüren statik satır içi işlevdir.
Return<void>
nesne algılandı. Tipik bir sunucu yöntemi örneği
geri çağırma parametresiyle uygulama:
Return<void> someMethod(someMethod_cb _cb) { // Do some processing, then call callback with return data hidl_vec<uint32_t> vec = ... _cb(vec); return Void(); };
Döndürülen değeri olmayan işlevler
generates
ifadesi olmayan bir işlevin C++ imzası
parametre listesinde geri çağırma parametresi olmaz. Dönüş türü,
Return<void>.
olmalıdır
Tek yön işlevleri
oneway
anahtar kelimesiyle işaretlenen işlevler eşzamansızdır
işlevleri (istemciler yürütmelerini engellemez) ve dönüşü yoktur
değerler. Bir oneway
işlevinin C++ imzası
geri çağırma parametresini içerir ve C++ dönüş değeri şöyle olur:
Return<void>
.