Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Referensi pustaka PC Tablet yang dikelola sekarang dapat ditemukan di bagian Pustaka Kelas SDK Windows Vista yang reguler. Ini menyediakan model objek untuk Microsoft Visual C++. Sebagian besar objek di COM Library identik dengan yang ditemukan di TABLET PC Managed API.
Namun, COM API berisi beberapa anggota selain yang ditemukan di API Terkelola karena perbedaan antara lingkungan Microsoft Win32 standar dan lingkungan microsoft .NET Frameworksoftware development kit (SDK). Misalnya, objek InkRectangle dan InkTransform digunakan dalam COM, tetapi FrameworkSDK menyediakan implementasi asli untuk Kelas InkRectangle dan Kelas InkTransform yang menghilangkan kebutuhan akan objek ini di platform PC Tablet API Terkelola.
Nota
Objek dalam COM API dan kontrol tinta tidak dirancang untuk digunakan di Halaman Server Aktif (ASP).
Bekerja dengan Koleksi
Jika Anda meneruskan nilai NULL sebagai indeks ke salah satu objek koleksi di Pustaka COM, Anda menerima item pertama dalam koleksi karena nilai argumen ini dikoerasikan ke 0 saat panggilan dilakukan.
Properti _NewEnum diberi tanda sebagai dibatasi penggunaannya dalam definisi Bahasa Definisi Antarmuka (IDL) untuk antarmuka koleksi.
Di C++, gunakan loop For... untuk menjalankan iterasi pada koleksi dengan terlebih dahulu mendapatkan panjang koleksinya. Contoh di bawah ini menunjukkan cara melakukan iterasi melalui goresan objekInkDisp, pInk.
IInkStrokes* pStrokes;
HRESULT result = pInk->get_Strokes(&pStrokes);
if (SUCCEEDED(result))
{
// Loop over strokes
long nStrokes;
result = pStrokes->get_Count(&nStrokes);
if (SUCCEEDED(result))
{
for (int i =0; i < nStrokes; i++)
{
IInkStrokeDisp* pStroke;
result = pStrokes->Item(i, &pStroke);
if (SUCCEEDED(result))
{
// Code that uses pStroke
// ...
}
}
}
}
Parameter
Jika Anda meneruskan VT_EMPTY atau VT_NULL sebagai indeks ke salah satu objek koleksi di Pustaka COM, Anda menerima item pertama dalam koleksi karena nilai argumen ini dipaksa ke 0 saat panggilan dilakukan.
Menggunakan IDispatch
Untuk meningkatkan performa, antarmuka pemrograman aplikasi Platform Tablet PC COM (API) tidak mendukung pemanggilan IDispatchImpl::Invoke dengan struktur DISPPARAMS dengan argumen yang diberi nama.
IDispatchImpl::GetIDsOfNames juga tidak didukung. Sebagai gantinya, panggil Invoke dengan DISPID yang disediakan di header SDK.
Menunggu Peristiwa
Lingkungan PC Tablet berulir ganda. Lihat dokumentasi COM untuk multi-utas.
Dukungan untuk Agregasi
Agregasi telah diuji hanya untuk kontrol InkEdit, kontrol InkPicture, objek InkDisp, dan objek InkOverlay. Agregasi belum diuji untuk pengendalian dan objek lain di pustaka.
C++
Menggunakan Tablet PC SDK di C++ memerlukan penggunaan beberapa konsep COM, seperti VARIAN, SAFEARRAY, dan BSTR. Bagian ini menjelaskan cara menggunakannya.
VARIAN DAN SAFEARRAY
Struktur VARIAN digunakan untuk komunikasi antara objek COM. Pada dasarnya, struktur VARIAN adalah kontainer untuk serikat besar yang membawa banyak jenis data.
Nilai dalam anggota pertama struktur, vt, menentukan anggota union mana yang valid. Saat Anda menerima informasi dalam struktur VARIAN, periksa anggota vt untuk mengetahui anggota mana yang berisi data yang valid. Demikian pula, ketika Anda mengirim informasi menggunakan struktur VARIAN, selalu atur vt untuk mencerminkan anggota serikat pekerja yang berisi informasi.
Sebelum menggunakan struktur, inisialisasi dengan memanggil fungsi COM VariantInit. Setelah selesai dengan struktur, bersihkan sebelum memori yang berisi VARIAN dibebaskan dengan memanggil VariantClear.
Untuk informasi selengkapnya tentang struktur VARIANT, lihat VARIANT dan tipe data VARIANTARG.
Struktur SAFEARRAY disediakan sebagai cara untuk bekerja dengan aman dengan array di COM. Bidang "parray" VARIAN adalah penunjuk ke "SAFEARRAY". Gunakan fungsi seperti SafeArrayCreateVector, SafeArrayAccessData, dan SafeArrayUnaccessData untuk membuat dan mengisi SAFEARRAY dalam VARIAN.
Untuk informasi selengkapnya tentang jenis data SAFEARRAY, lihat Jenis Data SafeArray.
Contoh C++ ini membuatIInkStrokeDisp, pInkStrokeDisp, dalam objekInkDisp, pInk, dari array data titik.
VARIANT var, varPK;
LONG* plongArray=NULL;
POINT ptArray[2]={0};
long lSize=0;
IInkStrokeDisp* pInkStrokeDisp;
IInkDisp* pInk; // the object should be created correctly
// elsewhere and assigned here.
HRESULT hr=E_FAIL;
ptArray[0].x = 20;
ptArray[0].y = 100;
ptArray[1].x = 30;
ptArray[1].y = 110;
lSize = 2; // two points
VariantInit( &var );
VariantInit( &varPK );
SAFEARRAY* psa = SafeArrayCreateVector( VT_I4, 0, lSize*2 );
if( psa )
{
if( SUCCEEDED( hr = SafeArrayAccessData( psa, (void**)&plongArray) ))
{
for( long i = 0; i < lSize; i++ )
{
plongArray[2*i] = ptArray[i].x;
plongArray[2*i+1] = ptArray[i].y;
}
hr = SafeArrayUnaccessData( psa );
if ( SUCCEEDED( hr ) )
{
var.vt = VT_ARRAY | VT_I4;
var.parray = psa;
// varPK (packet description) is currently reserved, so it is
// just empty variant for now.
pInk->CreateStroke( var, varPK, &pInkStrokeDisp );
}
}
}
VariantClear( &var );
VariantClear( &varPK );
BSTR
Format string yang didukung untuk COM adalah BSTR. BSTR memiliki penunjuk ke string yang diakhiri dengan nol, tetapi juga berisi panjang string (dalam byte, tidak termasuk terminator), yang disimpan dalam 4 byte sebelum karakter pertama string.
Untuk informasi selengkapnya tentang BSTR, lihat Jenis Data BSTR.
Sampel C++ ini menunjukkan cara mengatur factoid pada InkRecognizerContext menggunakan BSTR.
IInkRecognizerContext* pRecognizerContext = NULL;
result = CoCreateInstance(CLSID_InkRecognizerContext,
NULL, CLSCTX_INPROC_SERVER,
IID_IInkRecognizerContext,
(void **) &pRecognizerContext);
if SUCCEEDED(result)
{
BSTR bstrFactoid = SysAllocString(FACTOID_DATE);
result = pRecognizerContext->put_Factoid(bstrFactoid);
if SUCCEEDED(result)
{
// Use recognizer context...
// ...
}
SysFreeString(bstrFactoid);
}