Üç İşaretçi Türü
MIDL, çok çeşitli uygulamaları barındırmak için üç tür işaretçiyi destekler. Üç farklı düzey başvuru, benzersiz ve tam işaretçi olarak adlandırılır ve sırasıyla [ başvuru], [benzersiz]ve [ptr]öznitelikleriyle gösterilir. Bu öznitelikler tarafından açıklanan işaretçi sınıfları birbirini dışlar. İşaretçi öznitelikleri tür tanımlarındaki işaretçilere, işlev dönüş türlerine, işlev parametrelerine, yapıların veya birleşimlerin üyelerine veya dizi öğelerine uygulanabilir.
Katıştırılmış işaretçiler, yapıların veya birleşimlerin üyesi olan işaretçilerdir. Bunlar dizilerin öğeleri de olabilir. [ ] yönde, eklenmiş [başv] işaretçilerinin geçerli depolamaya işaret ediyor olduğu varsayılır ve null olmamalıdır. Bu durum, işaret ettikleri tüm [başv] işaretçiler için özyinelemeli olarak geçerlidir. [in] yönünde, katıştırılmış [benzersiz] ve tam işaretçiler ([ptr] özniteliğine sahip işaretçiler) null olabilir veya olmayabilir.
İşlev bildiriminin söz diziminde bir parametreye yerleştirilen tüm işaretçi öznitelikleri, bu parametre için yalnızca en sağdaki işaretçi bildirimcisini etkiler. Diğer işaretçi bildirimcilerini etkilemek için ara adlandırılmış türler kullanılmalıdır.
İşaretçi döndüren işlevler, işlev özniteliği olarak bir işaretçi özniteliğine sahip olabilir. [unique] ve [ptr] öznitelikleri işlev dönüş türlerine uygulanmalıdır. İşaretçi olan üye bildirimleri, alan özniteliği olarak bir işaretçi özniteliği belirtebilir. İşaretçi özniteliği, typedef yapılarında tür özniteliği olarak da uygulanabilir.
Alan veya tür özniteliği olarak hiçbir işaretçi özniteliği belirtilmediğinde, işaretçi öznitelikleri, dağıtılmamış bir işaretçi bildiriminin kurallarına göre aşağıdaki gibi uygulanır.
DCE-uyumluluk modunda, işaretçi öznitelikleri IDL tanımlama dosyasında belirlenir. Tanımlama arabiriminde belirtilen bir [pointer_default**]**özniteliği varsa, bu öznitelik kullanılır. [pointer_default] özniteliği yoksa, tüm dağıtılmamış işaretçiler tam işaretçilerdir.
Microsoft uzantılar modunda, işaretçi öznitelikleri IDL dosyaları içeri aktarılarak belirlenebilir ve aşağıdaki sırayla uygulanır:
- Kullanım sitesine uygulanan açık bir işaretçi özniteliği.
- [ref] özniteliği, dağıtılmamış işaretçi bir üst düzey işaretçi parametresi olduğunda.
- Tanımlama arabiriminde belirtilen bir [pointer_default] özniteliği.
- Temel arabirimde belirtilen [pointer_default] özniteliği.
- [unique] özniteliği.
[pointer_default] arabirim özniteliği, bildirime açık bir işaretçi özniteliği uygulanmadığında, bir tür, parametre veya dönüş türü bildiriminde işaretçi bildirimciye uygulanacak varsayılan işaretçi özniteliklerini belirtir. [pointer_default] arabirim özniteliği, [ref] varsayılan bir parametrenin dağıtılmamış üst düzey işaretçisine uygulanmaz.