Aracılığıyla paylaş


Tam İşaretçiler

benzersiz işaretçilerinden farklı olarak, tam işaretçiler diğer adları destekler. Bu, aşağıdaki şekilde gösterildiği gibi birden çok işaretçinin aynı verilere başvurabileceği anlamına gelir:

aynı veri

Tam işaretçi aşağıdaki özelliklere sahiptir:

  • Null değerine sahip olabilir.
  • Çağrı sırasında null olandan null olmayana dönüşebilir. Değer null olmayan olarak değiştiğinde, istemci saplaması dönüşte ayrılan yeni belleği ayırır. İstemci programı sonlanmadan önce bu belleği boşaltmalıdır.
  • Çağrı sırasında null olmayandan null olarak değişebilir. Değer null olarak değiştiğinde, uygulama belleği boşaltmaktan sorumludur.
  • Değer, null olmayan bir değerden diğerine değişebilir.
  • Tam işaretçinin işaret ettiği depolamaya işlemdeki başka bir işaretçi veya ad tarafından erişilebilir.
  • İşaretçi null değerine sahip değilse dönüş verileri mevcut depolama alanına yazılır.

Aşağıdaki örnekte gösterildiği gibi tam işaretçi belirtmek için [ ptr ] özniteliğini kullanın:

/* IDL file */
[ 
  uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45),
  version(1.0)
]
interface FullPtrInterface
{
  void RemoteFn([in,ptr,string]) char *ptrName1,
                [in,ptr,string]  char *ptrName2);
}

Bu örnekte ptrName1 ve ptrName2 parametreleri bir dizenin tam işaretçileri olarak tanımlanır. her iki işaretçinin de tek bir dize içeren aynı bellek adresini işaret etmek mümkündür.

Diğer ad desteği sağlanırken [ptr] gereklidir. Ancak, RPC'de kullanılabilen tüm işaretçilerin en iyi şekilde işlenmesini gerektirdiğinden, çoğu uygulama için önerilmez.