Bagikan melalui


Fungsi Tidak Dirancang untuk Menghasilkan UI

Asumsikan bahwa penyedia layanan harus menampilkan kotak dialog (seperti kotak dialog unimodem atau ATSP Talk/Hangup) selama pemrosesan lineMakeCall atau lineDial. Dalam hal ini, ini adalah penyedia layanan, bukan aplikasi, yang memutuskan bahwa UI harus ditampilkan.

Untuk memanggil DLL UI dalam proses aplikasi, penyedia layanan memanggil panggilan balik Line_Event TSPI, menghasilkan pesan LINE_CREATEDIALOGINSTANCE, meneruskan penunjuk ke struktur jenis TUISPICREATEDIALOGINSTANCEPARAMS. Struktur ini berisi dwRequestID fungsi tempat UI dikaitkan, memungkinkan TAPISRV mengidentifikasi aplikasi klien tempat UI dibuat.

TAPISRV meminta instans TAPI aplikasi yang benar untuk memuat DLL UI dan membuat utas untuk UI dalam proses aplikasi. Dari utas UI baru ini, TAPI memanggil fungsi TUISPI_providerGenericDialog UI DLL, meneruskan data yang ditentukan oleh penyedia layanan telepon dalam struktur yang diteruskan dengan pesan LINE_CREATEDIALOGINSTANCE; DLL UI menampilkan kotak dialog yang sesuai (yang penting untuk desain privat antara DLL UI dan penyedia layanan telepon). DLL UI tidak kembali dari TUISPI_providerGenericDialog hingga kotak dialog ditutup.

Penyedia layanan telepon dapat menghasilkan data yang diperbarui untuk ditampilkan dalam kotak dialog (atau, misalnya, menginstruksikan kotak dialog untuk ditutup, jika panggilan ditinggalkan atau peristiwa lain terjadi) dengan mengirim pesan LINE_SENDDIALOGINSTANCEDATA. TAPISRV menyampaikan data ke TAPI, yang memanggil fungsi TUISPI_providerGenericDialogData DLL UI. Mekanisme ini menyediakan "kirim" searah ke DLL UI. Jika DLL UI ingin menginformasikan penyedia layanan telepon dari hasil kotak dialog atau mendapatkan data lain, itu dapat memanggil fungsiDllCallbackProc (pointer yang diterimanya saat TUISPI_providerGenericDialog dipanggil).

Saat kotak dialog dihentikan, TUISPI_providerGenericDialog kembali ke TAPI. TAPI memanggil FreeLibrary untuk merilis DLL UI, dan keluar dari utas UI yang telah dibuat dalam konteks aplikasi. Kemudian meminta TAPISRV untuk memanggil fungsi TSPI_providerFreeDialogInstance penyedia layanan telepon untuk membatalkan ikatan asosiasi yang dibuat ketika penyedia layanan telepon awalnya mengirim pesan LINE_CREATEDIALOGINSTANCE. Fungsi ini juga dipanggil jika proses aplikasi berakhir secara tak terduga sebelum TUISPI_providerGenericDialog kembali.