Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bazen bir yöntem yığında bir bellek arabelleği ayırır ve arabelleğin adresini çağırana döndürür. COM, yığında bellek ayırmaya ve boşaltmaya yönelik bir işlev çifti tanımlar.
- CoTaskMemAlloc işlevi bir bellek bloğu ayırır.
- CoTaskMemFree işlevi, CoTaskMemAllocile ayrılan bir bellek bloğunu serbest bırakır.
Aç iletişim kutusu örneğinde bu desenin bir örneğini gördük:
PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
// ...
CoTaskMemFree(pszFilePath);
}
GetDisplayName yöntemi bir dize için bellek ayırır. dahili olarak yöntemi, dizeyi ayırmak için CoTaskMemAlloc çağırır. yöntemi döndürdüğünde pszFilePath yeni arabelleğin bellek konumunu gösterir. Çağıran, belleği boşaltmak için CoTaskMemFree çağırmaktan sorumludur.
COM neden kendi bellek ayırma işlevlerini tanımlar? Bunun bir nedeni, yığın ayırıcı üzerinde bir soyutlama katmanı sağlamaktır. Aksi takdirde, bazı yöntemler malloc, diğerleri ise yeni çağırabilir. Bu durumda programınızın bazı durumlarda ücretsiz çağırması ve bazı durumlarda silmesi ve bunların hepsini takip etmek hızla imkansız hale gelir. COM ayırma işlevleri tekdüzen bir yaklaşım oluşturur.
Com'un bir ikili standardı olması, dolayısıyla belirli bir programlama diline bağlı olmaması da dikkate alınmalıdır. Bu nedenle, COM dile özgü herhangi bir bellek ayırma biçimine güvenemez.
Önümüzdeki