Menggunakan API Konteks Aktivasi

Aplikasi dapat mengelola konteks aktivasi dengan langsung memanggil fungsi konteks aktivasi. Konteks aktivasi adalah struktur data dalam memori. Sistem dapat menggunakan informasi dalam konteks aktivasi untuk mengalihkan aplikasi untuk memuat versi DLL tertentu, instans objek COM, atau versi jendela kustom. Untuk informasi selengkapnya, lihat Referensi Konteks Aktivasi .

Antarmuka pemrograman aplikasi (API) dapat digunakan untuk mengelola konteks aktivasi dan membuat objek bernama versi dengan manifes . Dua skenario berikut menggambarkan bagaimana aplikasi dapat mengelola konteks aktivasi dengan langsung memanggil fungsi konteks aktivasi. Namun, dalam kebanyakan kasus, konteks aktivasi dikelola oleh sistem. Pengembang aplikasi dan penyedia rakitan biasanya tidak perlu memanggil stack untuk mengelola konteks yang aktif.

  • Proses dan aplikasi yang menerapkan lapisan perantara atau lapisan pemrosesan.

    Misalnya, pengguna yang mengelola konteks aktivasi dalam perulangan peristiwa. Setiap kali jendela diakses, seperti dengan menggerakkan mouse di atas jendela, ActivateActCtx dipanggil, yang mengaktifkan konteks aktivasi saat ini untuk sumber daya, seperti yang ditunjukkan dalam fragmen kode berikut.

HANDLE hActCtx;  
CreateWindow();  
...  
GetCurrentActCtx(&ActCtx);  
...  
ReleaseActCtx(&ActCtx);  

Dalam fragmen kode berikut, fungsi API mengaktifkan konteks aktivasi yang sesuai sebelum memanggil CallWindowProc. Ketika CallWindowProc dipanggil, ia menggunakan konteks ini untuk meneruskan pesan ke Windows. Ketika semua operasi sumber daya telah selesai, fungsi akan menonaktifkan konteks.

ULONG_PTR ulpCookie;  
HANDLE hActCtx;  
if(ActivateActCtx(hActCtx, &ulpCookie))  
{  
    ...  
    CallWindowProc(...);  
    ...  
    DeactivateActCtx(0, ulpCookie);  
}
  • Lapisan pengiriman delegator.

    Skenario ini berlaku untuk manajer yang mengelola beberapa entitas dengan lapisan API umum, seperti manajer driver. Meskipun belum diimplementasikan, contohnya adalah driver ODBC.

    Dalam skenario ini, lapisan tengah menjadi mampu memproses pengikatan perakitan. Untuk mendapatkan driver pengikatan khusus versi, penerbit harus memberikan manifes dan menentukan dependensi pada komponen tertentu dalam manifes tersebut. Aplikasi dasar tidak secara dinamis terikat pada komponen; pada waktu eksekusi, manajer driver mengelola panggilan. Ketika driver ODBC dipanggil berdasarkan string sambungkan, ia memuat driver yang sesuai. Kemudian membuat konteks aktivasi menggunakan informasi dalam file manifes perakitan.

    Tanpa manifes, tindakan default untuk driver adalah menggunakan konteks yang sama seperti yang ditentukan oleh aplikasi—dalam contoh ini, MSVCRT versi 2. Karena manifes memang ada, konteks aktivasi terpisah ditetapkan. Ketika driver ODBC berjalan, driver tersebut mengikat ke versi 1 dari rakitan MSVCRT.

    Setiap kali manajer driver memanggil lapisan pengiriman—misalnya, untuk mendapatkan kumpulan data berikutnya—ia menggunakan rakitan yang sesuai berdasarkan konteks aktivasi. Fragmen kode berikut mengilustrasikan hal ini.

HANDLE hActCtx;  
ULONG_PTR ulpCookie;  
ACTCTX ActCtxToCreate = {...};  
hActCtx = CreateActCtx(&ActCtxToCreate);  
...;  
if (ActivateActCtx(hActCtx, &ulpCookie))  
{  
    ...  
    ConnectDb(...);  
    DeactivateActCtx(0, ulpCookie);  
}  
... 
ReleaseActCtx(hActCtx);