Zwischenspeichern (Internationalisierung)

Uniscribe speichert CMAP-Zuordnungen (Unicode-to-Glyphen), Glyphenbreiten und OpenType-Skriptstrukturierungstabellen. Ein Handle für die Tabellen für eine bestimmte Schriftart einer bestimmten Größe wird als "Skriptcache" bezeichnet. Viele Uniscribe-Funktionen rufen sowohl einen Handle-Parameter für den Gerätekontext als auch einen Zeiger auf eine SCRIPT_CACHE-Struktur auf. Diese Funktionen suchen zuerst nach Informationen über den Skriptcache und verwenden den Gerätekontext nur, wenn erforderliche Tabellen noch nicht zwischengespeichert sind. Beim Aufrufen der ScriptShape-, ScriptPlace- oder ScriptTextOut-Funktion muss die Anwendung einen Zeiger auf eine SCRIPT_CACHE-Struktur übergeben. Das Handle sollte mit NULL initialisiert werden, bevor es von der Anwendung zum ersten Mal an eine Uniscribe-Funktion übergeben wird. Die Anwendung sollte niemals dasselbe Handle für verschiedene Schriftarten oder unterschiedliche Größen übergeben.

Eine Anwendung kann einen Skriptcache jederzeit freigeben. Uniscribe verwaltet die Verweisanzahl in seinen Schriftarten- und Shapercaches, gibt Schriftdaten nur frei, wenn alle Schriftgrößen der Schriftart freigegeben werden, und gibt Shaperdaten nur frei, wenn alle Schriftarten, die der Shaper unterstützt, freigegeben werden. Wenn die Anwendung mit einem Stil fertig ist, sollte sie die ScriptFreeCache-Funktion aufrufen, um den Skriptcache für den Stil frei zu geben.

Für ScriptShape und ScriptPlace ist es gültig, dass die Anwendung einen NULL-Gerätekontext übergibt. In den meisten Fällen ist der Aufruf erfolgreich, da erforderliche Tabellen bereits zwischengespeichert sind. Wenn die Strukturierung oder Platzierung Zugriff auf einen Gerätekontext erfordert, wird ScriptShape oder ScriptPlace sofort mit dem E_PENDING Fehlercode zurückgegeben. Anschließend muss die Anwendung die Schriftart im Gerätekontext auswählen. Für die meisten Anwendungen trägt dies zur Leistung bei, indem die wiederholte Vorbereitung eines Gerätekontexthandles mit Aufrufen von SelectObject vermieden wird.

Verwenden von Uniscribe