ドキュメントがすべてのマシンで同じように表示されるようにするには、データとともにフォントを保存する必要があります。この目的のために、私はTTEmbedFontを使用してバイトを取得して保存し、次にTTLoadEmbeddedFontを使用してフォントをメモリにロードしたらインストールします。
問題は、TTLoadEmbeddedFontを使用しようとするたびにE_FONTDATAINVALIDを取得し続けることです。READEMBEDPROCを3回呼び出し、毎回4バイトを要求してから、エラーを返します。私の読み取り手順は次のようになります。
unsigned long CFontLoaderDlg::ReadFontCallback(
_In_ void *lpvReadStream,
_In_ void *lpvBuffer,
_In_ const unsigned long cbBuffer
)
{
CFontLoaderDlg *loader = static_cast<CFontLoaderDlg *>(lpvReadStream);
size_t remaining = loader->m_font_bytes.size() - loader->m_pos;
size_t bytes_to_read = (cbBuffer > remaining) ? remaining : cbBuffer;
memcpy(lpvBuffer, &(loader->m_font_bytes[loader->m_pos]), bytes_to_read);
loader->m_pos += bytes_to_read;
return bytes_to_read;
}
ベクトルm_font_bytesは、TTEmbedFontへの呼び出しから書き込まれたさようならを保持します。
TTLoadFontへの私の呼び出しは次のようになります。
LONG ret = TTLoadEmbeddedFont(
&hFontReference,
TTLOAD_PRIVATE,
&ulPrivStatus,
LICENSE_PREVIEWPRINT,
&ulStatus,
ReadFontCallback,
this,
nullptr,
nullptr,
nullptr
);
誰かが同様の問題を抱えていましたか、またはこのようなものを機能させましたか?