Aracılığıyla paylaş


Özel Durumlara Göre Hataları Göster

Geleneksel C programcıları için hatalar genellikle dönüş değerleri veya hata kodunu döndüren özel bir [out] parametresi aracılığıyla döndürülür. Bu, aşağıdaki şekilde uygulanan arabirimlere yol açar:

long sample(...)
{
    ...
    p = new Cbar(...);
    if (p == NULL)
    {
        // cleanup
        ...
        return ERROR_OUTOFMEMORY;
    }
}

Bu yaklaşımdaki sorun, RPC dönüş değerlerinin yalnızca uzun tamsayılar olmasıdır. Hata olarak özel bir anlamı yoktur (error_status_t sunucu tarafında özel semantik yoktur), bu da önemli etkiler taşır.

İlk olarak, RPC işlemin başarısız olduğu konusunda uyarılmaz; tüm [in, out] ve [out] bağımsız değişkenlerinin özetini kaldırmaya çalışır. Bağlam tanıtıcılarının hata semantiği de farklıdır. İstemciye döndürülen paket temelde bir başarı paketidir ve hata kodu paketin derinliklerine gömülüdür. Bu, RPC'nin genişletilmiş hata bilgilerini kullanmadığı anlamına da gelir, bu nedenle istemci yazılımı genellikle çağrının başarısız olduğu yeri ayırt edemez.

Yapılandırılmış Özel Durum İşleme (SEH) özel durumları oluşturarak (C++değil) RPC sunucu yordamlarındaki hataları belirtmek çok daha iyi bir yaklaşımdır. Bir SEH özel durumu oluşturulduğunda, denetim doğrudan RPC çalışma süresine gider. Bazen düzgün bir şekilde temizlenemeyen bir yordamda hata oluşur ve arayana bir hata belirtmesi gerekir. Yordamın çağırana bir hata döndürmesi gerekir ve bu da çağırana bir hata döndürebilir ve bu şekilde devam eder. Ancak, yığındaki son sunucu yordamının RPC'ye dönmeden önce bir özel durum oluşturarak RPC'ye bir hatanın oluştuğuna işaret etmesi gerekir.

Özel Durum İşleme