RTFCONV.DLL の API 解説


針谷 壮一



この文書は C 言語または C++ 言語での使用を前提に書かれています。他の言語からも呼び出すことができますが、 DLL 呼び出しの方法については、各種参考書をご覧ください。


   目次


DLL の呼び出しについて



   このファイルは RTFCONV.DLL の関数について説明しています。アプリケーションから RTFCONV.DLL を呼び出せば、リッチテキストフォーマットとテキストファイルの相互変換、あるいはテキストファイルの文字コード変換が可能になります。
   RTFCONV.DLL の呼び出しの方法は、次の二つがあります。(2) の方法をお勧めします。

   (1) リンカによってリンクする方法
   ソースファイルにヘッダーファイル rtfconv.h をインクルードし、リンカのオプションに rtfconv.lib を追加して、コンパイル+リンクを行ってください。この方法は、簡単ではありますが、実行ファイルは実行時に RTFCONV.DLL がみつからない場合、起動さえ出来なくなります。また、添付した rtfconv.lib は Microsoft社製のリンカに対応したファイル形式となっています。

   (2) Windows API の LoadLibrary によって呼び出す方法
   ;ソースファイルににヘッダーファイル rtfconv.h をインクルードし、LoadLibrary により RTFCONV.DLL をロードして、さらに GetProcAddress により各関数のアドレスを取得します。関数実行後は、FreeLibrary により RTFCONV.DLL をアンロードします。この方法では、ソースファイルの記述が複雑になりますが、実行時に RTFCONV.DLL が見つからない場合に、適切なエラーメッセージを出すなどの処理を行うことができます。また、Windows API を使うため、rtfconv.lib の互換性が問題になることもありません。


   このファイルで紹介する使用例は、いずれも上記 (2) の方法を用いています。





関数の解説



   RTFCONV.DLL は、マルチスレッド環境での使用に対応しています。このファイルで紹介する関数は、いずれもスレッドセーフとなるよう設計されています。(このファイルに掲載されていない古い関数はスレッドセーフではありません。)


  int WINAPI RtfconvEx (
      LPCTSTR               pSrcFileName,
      LPCTSTR               pDstFileName,
      int                   nSrcCodePage,
      int                   nDstCodePage,
      const RTFCONVEXINFO * pRtfconvExInfo
  ) ;

   RtfconvEx は、リッチテキストフォーマットやテキストファイルを相互に変換します。RTFCONV.DLL の中心的な役割を担う関数です。Unicode 版関数 RtfconvExW と ANSI 版関数の RtfconvExA が実装されています。マクロ UNICODE が指定してあれば、マクロ RtfconvEx は関数 RtfconvExW に展開され、そうでなければ関数 RtfconvExA に展開されます。

   /**** 引き数 ****/

  LPCTSTR pSrcFileName    入力ファイルのファイル名を指定
  LPCTSTR pSrcFileName    出力ファイルのファイル名を指定
   入力ファイル名と出力ファイル名は、絶対パス名でも相対パス名でもかまいません。UNC でもかまいません。ファイル名に NULL を指定すると 標準入出力(stdin または stdout)を指定したものとみなします。入力ファイルと出力ファイルに同一のファイルを指定した場合の動作は未定義です。入力ファイルのサイズに制限はありません(ディスクのファイルシステムの制限に依存します)。

  int nSrcCodePage      入力ファイルのコードページ
  int nDstCodePage      出力ファイルのコードページ
   入出力ファイルのコードページを指定します。コードページの番号は Windows のシステムで使われているものと同一ですが、rtfconv.h で定義されているコードページの名前を使用すると便利です。コードページに 0 を指定すると、リッチテキストフォーマットとみなします。入力と出力に同じコードページを指定することもできます。ただし入出力ともにリッチテキストファイルを指定することはできません。

   対応可能なコードページは rtfconv.h で定義されているコードページすべてです。UNICODE(UTF-8 および UTF-16 のリトルエンディアン・ビッグエンディアン)や、モードのある文字コード(ISO-2022-JP や HZ など)にも対応しています。OS が対応していないコードページを使用する場合には、SBCTBL.DLL, MBCTBL.DLL, CNSTBL.DLL が RTFCONV.DLL と同じディレクトリに存在する必要があります。

  const RTFCONVEXINFO * pRtfconvExInfo     変換オプション
   構造体
RTFCONVEXINFO のアドレスを指定します。この構造体により、変換を制御するための各種オプションを指定することができます。必要でなければ NULL を指定します。

   /**** 戻り値 ****/

   RtfconvEx の戻り値には、以下の定数が定められています。

RTFCONV_SUCCESS
変換が成功した

RTFCONV_ERROR_UNKNOWN
原因不明のエラーが発生した

RTFCONV_ERROR_READ
読み込みに失敗した

RTFCONV_ERROR_WRITE
書き込みに失敗した

RTFCONV_ERROR_RTFFORMAT
リッチテキストフォーマットの形式にエラーがあった

RTFCONV_ERROR_RTFBRACE
リッチテキストフォーマットのカッコが対応していない

RTFCONV_ERROR_MEMORY
必要なメモリーが確保できなかった

RTFCONV_ERROR_CODEPAGE
無効なコードページを指定した

RTFCONV_ERROR_ABORTED
変換中に AbortRtfconv により中断された

RTFCONV_ERROR_PARAM
引き数の指定に誤りがあった

これらの戻り値は、関数 GetRtfconvLastError によっても取得することができます。






  intptr_t WINAPI RtfconvStringEx (
      const void *          pSrcBuffer,
      void *                pDstBuffer,
      int                   nSrcCodePage,
      int                   nDstCodePage,
      const RTFCONVEXINFO * pRtfconvExInfo,
      size_t                nMaxLen
  ) ;

   RtfconvStringEx は、文字列を特定のコードページの文字列に変換します。リッチテキスト形式の文字列にも対応しています。

   /**** 引き数 ****/

  const void * pSrcBuffer    変換する文字列のポインタを指定
  void * pDstBuffer          出力するバッファのポインタを指定
  int nSrcCodePage                        元の文字列のコードページ
  int nDstCodePage                        出力する文字列のコードページ
  const RTFCONVEXINFO * pRtfconvExInfo    変換オプション
  size_t nMaxLen            出力するバッファの最大サイズ(バイト)を指定
   引き数 nSrcCodePage, nDstCodePage, pRtfconvExInfo は、
RtfconvEx で使われるものと同じなので、そちらを参照してください。

   引き数 pSrcBuffer, pDstBuffer は、char* と wchar_t* のどちらの文字列バッファでもキャストなして指定できるよう、void* で宣言してあります。出力する文字列が nMaxLen を超過しそうなときは、途中で変換を中止し、出力文字列の終端にヌル文字を書き込んだ上で、-1 を返します。pSrcBuffer(入力元)と pDstBuffer(出力先)のメモリが重複している場合の動作は未定義です。

   pDstBuffer(出力先)に NULL を指定したら、変換を行わず、出力に必要なバッファの長さ(バイト)を返して終了します。その場合、nMaxLen は無視されます。

   pSrcBuffer(入力元) は、文字列の終端がヌル文字で終わっていなければいけません。C言語以外の言語で、文字列がヌル文字で終わらない場合は、前もって終端にヌル文字を加えておかなければいけません。

   なお、注意すべき点は、改行文字はデフォルトではすべて CR+LF に変換されてしまいます。LF のみ出力したい場合は、構造体 RTFCONVEXINFO の dwConversionMode に CONVMODE_OUTPUT_LF を指定してください。C 言語でストリームをテキストモードで扱っているときは、注意が必要です。また、UTF-16 で出力するときは、デフォルトで Byte Order Mark を出力します。Byte Order Mark を出力したくないときは、CONVMODE_NOT_OUTPUT_BOM を指定してください。


   /**** 戻り値 ****/

   出力した文字列の長さ(終端のヌル文字を含む、単位はバイト)を返す。変換に失敗したら、-1 を返す。pDstBuffer が NULL の場合は、変換を行わず、出力に必要なバッファの長さ(終端のヌル文字を含む、単位はバイト)を返します。

   RtfconvStringEx のエラーの原因は、関数 GetRtfconvLastError で取得することができます。

   戻り値の型が intptr_t となっていますが、32ビット環境では intptr_t は int と等価です。






  int WINAPI RtfconvCharEx (
      int                   C,
      int                   nSrcCodePage,
      int                   nDstCodePage,
      const RTFCONVEXINFO * pRtfconvExInfo
  ) ;

   RtfconvCharEx は、一つの文字を特定のコードページの文字に変換します。モードのあるコードページ(JIS や HZ など)や UTF-8 には対応していません。

   /**** 引き数 ****/
  int C                                   変換する文字を指定
  int nSrcCodePage                        元の文字列のコードページ
  int nDstCodePage                        出力する文字列のコードページ
  const RTFCONVEXINFO * pRtfconvExInfo    変換オプション
   引き数 nSrcCodePage, nDstCodePage, pRtfconvExInfo は、
RtfconvEx で使われるものと同じなので、そちらを参照してください。ただし、nSrcCodePage, およびnDstCodePage に 0 を指定することはできません。(つまりリッチテキスト形式を指定することはできません。)モードのあるコードページ(JIS や HZ など)や UTF-8を指定することもできません。

   引き数 C に UTF-16 のサロゲートペアを指定する場合は、たとえば "D800-DC00" ならば、C に (int)0xD800DC00 を指定してください。引き数 C に GB18030 の4バイト文字を指定する場合は、たとえば "81-30-82-31" のバイト列ならば、C に (int)0x81308231 を指定してください。


   /**** 戻り値 ****/

   変換した文字を返す。
   失敗したら -1 を返す

   RtfconvChar のエラーの原因は、GetRtfconvLastError で取得することができます。
   戻り値が -1 で、GetRtfconvLastError の戻り値が RTFCONV_SUCCESS なら、変換先のコードページに適切な文字が見つからなかったことを表します。

   Unicode のサロゲートペアを返す場合は、たとえば変換結果が "D800-DC00" のワード列ならば、(int) 0xD800DC00 を返します。GB18030 の4バイト文字を返す場合は、たとえば変換結果が "81-30-82-31" のバイト列ならば、(int) 0x81308231 を返します。
  





  int WINAPI IsRtfconvValidCodePage (
      int nCodePage
  ) ;

   現在の環境で RTFCONV.DLL が変換可能なコードページかどうかを返します。

   RTFCONV.DLL は実行時に、変換テーブルを、まず OS から探し、もし OS に見つからない場合、RTFCONV.DLL と同じディレクトリにある SBCTBL.DLL, MBCTBL.DLL, CNSTBL.DLL から探します。特殊なコードページのファイルや文字列を変換しようとするときは、前もって、この関数を呼び出すことにより、RTFCONV.DLL が変換可能かを判断することができます。


   /**** 戻り値 ****/

   変換可能なら 0 以外を、不可能なら 0 を返す。






  int WINAPI GetRtfconvLastError (
      void
  ) ;

   直前に呼び出された
RtfconvEx, RtfconvStringEx, RtfconvCharEx のエラー値を取得します。
   このエラー値はスレッドごとに管理されています。

   /**** 戻り値 ****/

   以下の定数を返します。

RTFCONV_SUCCESS
変換が成功した

RTFCONV_ERROR_UNKNOWN
原因不明のエラーが発生した

RTFCONV_ERROR_READ
読み込みに失敗した

RTFCONV_ERROR_WRITE
書き込みに失敗した

RTFCONV_ERROR_RTFFORMAT
リッチテキストフォーマットの形式にエラーがあった

RTFCONV_ERROR_RTFBRACE
リッチテキストフォーマットのカッコが対応していない

RTFCONV_ERROR_MEMORY
必要なメモリーが確保できなかった

RTFCONV_ERROR_CODEPAGE
無効なコードページを指定した

RTFCONV_ERROR_ABORTED
変換中に AbortRtfconv により中断された

RTFCONV_ERROR_PARAM
引き数の指定に誤りがあった







  int WINAPI AbortRtfconv (
      void
  ) ;

   AbortRtfconv を呼ぶと、同じプロセス内で実行されている全ての
RtfconvEx および RtfconvStringEx は、変換を途中で中止し、RTFCONV_ERROR_ABORTED を返して戻ります。ユーザが巨大ファイルの変換を途中で中止したい場合に、この関数を使用します。

   ウィンドウプログラムでは、ウィンドウプロシージャの中で、中止を指示するボタン等を押したときに、AbortRtfconv を呼び出すようにします。(この場合、RTFCONVEXINFO 構造体 の dwConversionMode に CONVMODE_PEEKMESSAGE を指定するか、RtfconvEx または RtfconvStringEx を別スレッドで起動するなどして、メッセージループをまわしておく必要があります。)

   コンソールプログラムでは、signal 関数により Ctrl+C をフックし、捕捉時に呼び出される関数から AbortRtfconv を呼び出すようにします。


   /**** 戻り値 ****/

   常に 0 を返す。






  int WINAPI GetDllVersion (
      void
  ) ;

   RTFCONV.DLL のバージョンを取得します。

   /**** 戻り値 ****/

   RTFCONV.DLL のバージョンを返します。バージョン 4.31 ならば、431 が返ります。





構造体の解説



  typedef struct {
        size_t                cbSize ;
        unsigned long         dwConversionMode ;
        unsigned long         dwAdditionalMode ;
        const char *          pUnmappableCharFormat ;
        int                   nDefaultCjkCodePage ;
        int                   nFontSize ;
        const RTFFONTINFO *   pFontInfo ;
        const RTFFONTEXINFO * pFontExInfo ;
        size_t                nNumberOfFontExInfo ;
        const RTFLANGIDINFO * pLangIdInfo ;
        size_t                nNumberOfLangIdInfo ;
        const void *          pReserved ;
  } RTFCONVEXINFO ;

   /**** 各メンバーの解説 ****/

cbSize
この構造体のサイズをバイト単位で指定します。

dwConversionMode
変換オプションを指定します。以下のような定数が定められています。必要でなければ 0 を指定してください。複数の定数を指定したい場合は、ビットの和で指定してください。

CONVMODE_PEEKMESSAGE
変換中にメッセージループをまわす。

CONVMODE_OUTPUT_CODE_NUMBER
テキストファイル出力時に、変換できない文字は Unicode の番号を[UNICODE:hhh] の形式で出力します(この出力形式は pUnmappableCharFormat で変更できます)。デフォルト(これを指定しない)では、変換できない文字は、半角文字なら ? に、全角文字なら ?? に変換されます。

CONVMODE_OUTPUT_CODE_NUMBER_HTML
テキストファイル出力時に、変換できない文字は Unicode の番号を &#xhhhh; の形式で出力します。デフォルト(これを指定しない)では、変換できない文字は、半角文字なら ? に、全角文字なら ?? に変換されます。

CONVMODE_OUTPUT_NUMBER_SURROGATE
テキストファイル出力時に、CONVMODE_OUTPUT_CODE_NUMBER または CONVMODE_OUTPUT_CODE_NUMBER_HTML を指定して、変換できない文字を数値で出力するようにしたとき、U+10000 以上の文字をサロゲートペアで出力します。

CONVMODE_INPUT_CODE_NUMBER_HTML
テキストファイル入力時に、ファイル中の HTML形式の文字表記(&#nnn;、&#xhhhh;、 など)を Unicode のコード番号であると認識します。

CONVMODE_NO_VARIANT_KANJI
テキストファイル出力時に、漢字の異体字を検索しません。デフォルト(これを指定しない)では、異なる言語間での変換および Unicode から各言語への変換で、異体字を検索してより適切な漢字を出力します。たとえば中国語→日本語の変換で、中国語簡体字は日本の漢字に(該当する文字があれば)変換して出力するようにします。CONVMODE_NO_VARIANT_KANJI を指定すると、この異体字変換が行われません。このオプションは U+2E80 以上の文字に対して有効です。

CONVMODE_NO_VARIANT_EUROPEAN
テキストファイル出力時に、ヨーロッパの文字の異体字を検索しません。デフォルト(これを指定しない)では、異なる言語間での変換および Unicode から各言語への変換で、出力できないヨーロッパの文字は、異体字があれば異体字をで出力します。たとえばフランス語→日本語の変換で、アクサン付きローマ字は、アクサンなしのローマ字に変換して出力します。CONVMODE_NO_VARIANT_EUROPEAN を指定すると、この異体字変換が行われません。このオプションは U+2E80 未満の文字に対して有効です。

CONVMODE_NO_VARIANT
テキストファイル出力時に、全ての文字の異体字を検索しません。CONVMODE_NO_VARIANT_KANJI と CONVMODE_NO_VARIANT_EUROPEAN を両方指定したときと等価です。

CONVMODE_VARIANT_ONLY_ROUNDTRIP
テキストファイル出力時に、入力と出力で指定したコードページで逆変換しても元の文字に戻せるときのみ、異体字に変換します。

CONVMODE_CONVERT_PUA
2バイトの文字コードの外字領域の変換を有効にします。デフォルト(これを指定しない)では、外字領域の文字は変換不可能な文字として扱われます。

CONVMODE_NO_HANKANA
半角カナを全角に変換して出力します。

CONVMODE_NO_ZENALPHA
全角アルファベット・数字を半角に変換して出力します。

CONVMODE_NO_ZENSPACE
全角空白を半角空白2個に変換して出力します。

CONVMODE_NO_ZENSYMBOL
全角記号を半角に変換して出力します。

CONVMODE_YEN_NO_BACKSLASH
日本語・韓国語の半角円記号をバックスラッシュに変換せず、U+A5/U+20A9 に変換します。

CONVMODE_USE_LOCAL_FONT
リッチテキストフォーマット出力時に、ASCII 文字も2バイト用フォント(MS明朝など)で出力します。

CONVMODE_NO_GBK
中国語GB2312のテキストファイルを出力するとき、GBK の拡張漢字を出力しません。

CONVMODE_OUTPUT_GB18030
中国語GB2312のテキストファイルを出力するとき、GB18030の拡張漢字を出力します。

CONVMODE_NO_CW
リッチテキスト入力時に、Chinese Writer, Korean Writer, cWnn, kWnn および SIL 等の IPA フォントを認識しません。

CONVMODE_OUTPUT_RUBY
リッチテキストをテキストファイルに変換するとき、ファイル中のルビをカッコにいれて出力します。

CONVMODE_OUTPUT_LINK
リッチテキストをテキストファイルに変換するとき、ファイル中のハイパーリンクのリンク先アドレスをカッコに入れて出力します。(表示されている文字列の中にリンク先のアドレスが含まれる場合は出力しません。)

CONVMODE_OUTPUT_HIDDEN
リッチテキストをテキストファイルに変換するとき、ファイル中の隠し文字を出力します。

CONVMODE_OUTPUT_CR
テキストファイル出力時に、改行を CR で出力します。デフォルト(これを指定しない)では、改行は CR+LF で出力します。

CONVMODE_OUTPUT_LF
テキストファイル出力時に、改行を LF で出力します。デフォルト(これを指定しない)では、改行は CR+LF で出力します。

CONVMODE_USE_DLL_TABLE
自前の変換テーブル SBCTBL.DLL, MBCTBL.DLL のみ使う。

CONVMODE_USE_SYSTEM_TABLE
OS の変換テーブルのみ使う。

CONVMODE_NO_OUTPUT_BOM
UTF-16/32 のテキストファイルを出力するとき、ファイル先頭に Byte Order Mark を出力しません。

CONVMODE_UTF8_WITH_BOM
UTF-8 のテキストファイルを出力するとき、ファイル先頭に Byte Order Mark を出力します。

CONVMODE_ENDIAN_AUTO
UTF16/32 のテキストファイルを入力するとき、ファイル先頭の Byte Order Mark によりエンディアンを自動的に判別します。もしファイル先頭に Byte Order Mark が存在しないならば、指定されたエンディアン(たとえば、引数 nSrcCodePage が、1200ならばリトルエンディアン、1201ならばビッグエンディアン)で読みこみます。デフォルト(これを指定しない)では、ファイル先頭の Byte Order Mark は無視し、引数 nSrcCodePage で指定されたエンディアンで読みこみます。

CONVMODE_EUC_HOJO
EUC-JP のテキストファイルを出力するとき、補助漢字を出力します。デフォルト(これを指定しない)では、出力時に補助漢字は変換不可能な文字として扱われます。(入力では、オプションの指定にかかわらず補助漢字を認識します。)EUC-JP の補助漢字の入力・出力は、MBCTBL.DLL を参照して行ないます。MBCTBL.DLL が見つからないときや、CONVMODE_USE_SYSTEM_TABLEを指定したときは、入出力ともに変換不可能な文字として扱われます。

dwAdditionalMode
付加的な変換オプションを指定します。おもにベンダー定義の文字コードの変換を制御するためのオプションを指定します。以下のような定数が定められています。必要でなければ 0 を指定してください。複数の定数を指定したい場合は、ビットの和で指定してください。

ADDITIONAL_MODE_JIS_INPUT_MAC
日本語テキストを入力するときに、Macintoshの変換テーブルに従います。

ADDITIONAL_MODE_JIS_OUTPUT_MAC
日本語テキストを出力するときに、Macintoshの変換テーブルに従います。

ADDITIONAL_MODE_JIS_OUTPUT_NO_VENDOR
日本語テキストを出力するときに、機種依存文字を出力しません。JIS X 0208:1997として出力します。

ADDITIONAL_MODE_JIS_INPUT_NO_VENDOR
日本語テキストを入力するときに、機種依存文字を入力しません。JIS X 0208:1997として入力します。

ADDITIONAL_MODE_JIS_INPUT_2004
日本語テキストをJIS X 0213:2004として入力します。

ADDITIONAL_MODE_JIS_OUTPUT_2004
日本語テキストをJIS X 0213:2004として入力します。

ADDITIONAL_MODE_JIS_NO_JIS83_NEW_STYLE
日本語テキストを出力するときに、JIS83で入れ替えられた新字体26字(EUCの補助漢字出力時は+28字)を出力しません。

ADDITIONAL_MODE_JIS_NO_JIS83_OLD_STYLE
日本語テキストを出力するときに、JIS83で入れ替えられた旧字体26字(EUCの補助漢字出力時は+28字)を出力しません。

ADDITIONAL_MODE_GBK_TO_LINSHIDAIMA
GBK→Unicodeの変換で GB13000 臨時代碼に変換します。

ADDITIONAL_MODE_LINSHIDAIMA_TO_GBK
Unicode→GBKの変換で GB13000 臨時代碼を変換します。

ADDITIONAL_MODE_PUA_TO_HKSCS
Unicode→HKSCSの変換で、PUA領域の文字をHKSCSに変換します。

ADDITIONAL_MODE_HKSCS_CJKA_TO_PUA
HKSCS→Unicodeの変換で、CJK拡張Aに含まれる文字をPUA領域に変換します。

ADDITIONAL_MODE_HKSCS_CJKB_TO_PUA
HKSCS→Unicodeの変換で、CJK拡張Bに含まれる文字をPUA領域に変換します。

ADDITIONAL_MODE_HKSCS_CJK41_TO_PUA
HKSCS→Unicodeの変換で、Unicode 4.1 以降に追加された文字をPUA領域に変換します。

ADDITIONAL_MODE_HKSCS_ALL_TO_PUA
HKSCS→Unicodeの変換で、PUA領域に変換可能な全ての文字をPUA領域に変換します。

ADDITIONAL_MODE_HKSCS_1999
HKSCSを出力するときは、HKSCS-1999 で出力します。

ADDITIONAL_MODE_HKSCS_2001
HKSCSを出力するときは、HKSCS-2001 で出力します。

ADDITIONAL_MODE_KS_NO_UHC
韓国語テキストを出力するとき、EUC-KR本来の文字のみを出力します。

ADDITIONAL_MODE_KS_PUNC
韓国語テキストを出力するとき、句点・読点をピリオド・コンマに変換します。

これらのオプションは、主に Microsoft の実装との互換性を維持するために使われます。中国語簡体字の変換は、ADDITIONAL_MODE_GBK_TO_PUA と ADDITIONAL_MODE_PUA_TO_GBKの両方を指定すると、Microsoft の GBK のマッピングテーブルと同一になります。

pUnmappableCharFormat
dwConversionMode に CONVMODE_OUTPUT_CODE_NUMBER を指定した時に、コード番号を出力する際のフォーマットを指定します。フォーマットの形式は C 言語の printf() に準じます。デフォルトでは "[UNICODE:%04X]" です。フォーマットにはひとつの %X や %u などを含めることができます(含まれていなくともかまいません。)フォーマットで指定できる文字列の長さ(終端のヌル文字を含む)は最大で 256 までです。文字列で使用できる文字は ASCII 文字の範囲(U+7Fまで)に限ります。必要でなければ NULL を指定してください。

nDefaultCjkCodePage
Unicode のテキストファイルをリッチテキストフォーマットに変換するとき、漢字を出力する際のコードページを指定します。指定できるのは 日本語(932)、中国語簡体字(936)、中国語繁体字(950)、韓国語(949)のみです。これ以外を指定すると、デフォルトのコードページ(日本語Windowsならば日本語)になります。必要でなければ 0 を指定してください。

nFontSize
リッチテキストの出力で使用するフォントのサイズ(ポイント数×2)を指定します。0 を指定すると、デフォルトのサイズ(21)で出力します。負数を指定すると、サイズ 0 で出力します。必要でなければ 0 を指定してください。

pFontInfo
リッチテキストの出力で使用するフォント名を指定します。
RTFFONTINFO 構造体のアドレスを指定してください。必要でなければ NULL を指定してください。

pFontExInfo
リッチテキストの出力で使用するフォント名を Unicode Block 単位で指定します。
RTFFONTEXINFO 構造体の配列のアドレスを指定してください。必要でなければ NULL を指定してください。

nNumberOfFontExInfo
pFontExInfo で指定した RTFFONTEXINFO 構造体の配列のサイズ(要素数)を指定してください。必要でなければ 0 を指定してください。

pLangIdInfo
リッチテキストの出力で使用する言語識別子を Unicode Block 単位で指定します。
RTFLANGIDINFO 構造体の配列のアドレスを指定してください。必要でなければ NULL を指定してください。

nNumberOfLangIdInfo
pLangIdInfo で指定した RTFLANGIDINFO 構造体の配列のサイズ(要素数)を指定してください。必要でなければ 0 を指定してください。

pReserved
予約されています。NULL を指定してください。






  typedef struct {
        size_t        cbSize ;
        const char *  pEuropean ;
        const char *  pJapanese ;
        const char *  pChineseSimplified ;
        const char *  pChineseTraditional ;
        const char *  pKorean ;
        const char *  pThai ;
  } RTFFONTINFO ;

   /**** 各メンバーの解説 ****/

cbSize
この構造体のサイズをバイト単位で指定します。

pEuropean
ヨーロッパ諸言語の文字用のフォント名を指定します。必要でなければ NULL を指定してください。

pJapanese
日本語の文字用のフォント名を指定します。必要でなければ NULL を指定してください。

pChineseSimplified
中国語簡体字用のフォント名を指定します。必要でなければ NULL を指定してください。

pChineseTraditional
中国語繁体字用のフォント名を指定します。必要でなければ NULL を指定してください。

pKorean
韓国語の文字用のフォント名を指定します。必要でなければ NULL を指定してください。

pThai
タイ語の文字用のフォント名を指定します。必要でなければ NULL を指定してください。






  typedef struct {
        int          C ;
        const char * pFont ;
  } RTFFONTEXINFO ;

   /**** 各メンバーの解説 ****/

C
指定するフォントが適用される文字の範囲を指定します。文字の範囲は、
http://www.unicode.org/Public/UNIDATA/Blocks.txt で示される文字ブロックを単位とし、指定したい範囲に含まれる任意の文字を Unicode スカラー値で指定してください。(一つのブロックに含まれるどの文字を指定しても、そのブロック内全体の文字のフォントを設定します。) C に -1 を指定すると、すべての文字を指定されたフォント名で出力します。

pFont
C で指定された範囲で用いられるフォント名を指定します。NULL を指定すると、デフォルトのフォント名を使用します。






  typedef struct {
        int  C ;
        int  nLangId ;
  } RTFLANGIDINFO ;

   /**** 各メンバーの解説 ****/

C
指定する言語識別子が適用される文字の範囲を指定します。文字の範囲は、
http://www.unicode.org/Public/UNIDATA/Blocks.txt で示される文字ブロックを単位とし、指定したい範囲に含まれる任意の文字を Unicode スカラー値で指定してください。(一つのブロックに含まれるどの文字を指定しても、そのブロック内全体の文字の言語識別子を設定します。) C に -1 を指定すると、すべての文字を指定された言語識別子で出力します。

nLangId
C で指定された範囲で用いられる言語識別子を MAKELANGID マクロで指定します。0 を指定すると、デフォルトの言語識別子を使用します。





サンプルコード



/**** 使用例 1 ****/

/* 日本語のテキストファイル "c:\foo.txt" を Unicode のテキストファイルに変換し、*/
/* "c:\poo.txt" に出力する。                                                    */

#include <windows.h>
#include "rtfconv.h"

typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName,
     int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ;


int main () {

    /* DLL */
    HINSTANCE hRtfconv ;
    RTFCONVEX pRtfconvEx ;

    /* Reading DLL */
    hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ;
    if ( hRtfconv == NULL ) {
        return 1 ;
    }

#ifdef UNICODE
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ;
#else
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ;
#endif
    if ( pRtfconvEx == NULL ) {
        FreeLibrary( hRtfconv ) ;
        return 1 ;
    }

    /* Conversion */
    pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.txt"), CP_JAPANESE, CP_UTF16, NULL ) ;

    /* Finalization */
    FreeLibrary( hRtfconv ) ;
    return 0 ;
}




/**** 使用例 2 ****/

/* 日本語のテキストファイル "c:\foo.txt" を リッチテキストフォーマットに変換し、*/
/* "c:\poo.rtf" に出力する。                                                    */

#include <windows.h>
#include "rtfconv.h"

typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName,
     int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ;


int main () {

    /* DLL */
    HINSTANCE hRtfconv ;
    RTFCONVEX pRtfconvEx ;

    /* Reading DLL */
    hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ;
    if ( hRtfconv == NULL ) {
        return 1 ;
    }

#ifdef UNICODE
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ;
#else
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ;
#endif
    if ( pRtfconvEx == NULL ) {
        FreeLibrary( hRtfconv ) ;
        return 1 ;
    }

    /* Conversion */
    pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.rtf"), CP_JAPANESE, 0, NULL ) ;

    /* Finalization */
    FreeLibrary( hRtfconv ) ;
    return 0 ;
}




/**** 使用例 3 ****/

/* 日本語のテキストファイル "c:\foo.txt" 中の半角カナを全角に変換し、ISO-2022-JP */
/* に変換して "c:\poo.txt" に出力する。                                          */

#include <windows.h>
#include "rtfconv.h"

typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName,
     int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ;


int main () {

    /* DLL */
    HINSTANCE hRtfconv ;
    RTFCONVEX pRtfconvEx ;

    /* Structures */
    RTFCONVEXINFO RtfconvExInfo = { sizeof(RTFCONVEXINFO) } ;

    /* Reading DLL */
    hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ;
    if ( hRtfconv == NULL ) {
        return 1 ;
    }

#ifdef UNICODE
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ;
#else
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ;
#endif
    if ( pRtfconvEx == NULL ) {
        FreeLibrary( hRtfconv ) ;
        return 1 ;
    }

    /* Options */
    RtfconvExInfo.dwConversionMode = CONVMODE_NO_HANKANA ;

    /* Conversion */
    pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.txt"), CP_JAPANESE, CP_ISO_JAPANESE, & RtfconvExInfo ) ;

    /* Finalization */
    FreeLibrary( hRtfconv ) ;
    return 0 ;
}




/**** 使用例 4 ****/

/* Unicode の文字列 "こんにちは" を日本語に変換して szBuffer に出力したあと、*/
/* szBuffer の文字列をメッセージボックスで表示する。                         */

#include <windows.h>
#include "rtfconv.h"

typedef intptr_t (WINAPI *RTFCONVSTRINGEX) ( const void *pSrcBuffer, void *pDstBuffer,
      int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo,
      size_t nMaxLen ) ;


int main () {

    char szBuffer [ 0x100 ] ;

    /* DLL */
    HINSTANCE hRtfconv ;
    RTFCONVSTRINGEX pRtfconvStringEx ;

    /* Reading DLL */
    hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ;
    if ( hRtfconv == NULL ) {
        return 1 ;
    }

    pRtfconvStringEx = (RTFCONVSTRINGEX) GetProcAddress( hRtfconv, "RtfconvStringEx" ) ;
    if ( pRtfconvStringEx == NULL ) {
        FreeLibrary( hRtfconv ) ;
        return 1 ;
    }

    /* Conversion */
    pRtfconvStringEx( L"こんにちは", szBuffer, CP_UTF16, CP_JAPANESE, NULL, sizeof(szBuffer) );

    /* Display */
    MessageBoxA( NULL, szBuffer, "test", MB_OK ) ;

    /* Finalization */
    FreeLibrary( hRtfconv ) ;
    return 0 ;
}




/**** 使用例 5 ****/

/* 日本語のテキストファイル "c:\foo.txt" を リッチテキストフォーマットに変換し、*/
/* "c:\poo.rtf" に出力する。                                                    */
/* 1バイト文字は "Arial" で、2バイト文字は "MS Pゴシック" で出力する。     */

#include <windows.h>
#include "rtfconv.h"

typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName,
     int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ;


int main () {

    /* DLL */
    HINSTANCE hRtfconv ;
    RTFCONVEX pRtfconvEx ;

    /* Structures */
    RTFCONVEXINFO RtfconvExInfo = { sizeof(RTFCONVEXINFO) } ;
    RTFFONTINFO FontInfo = { sizeof(RTFFONTINFO) } ;

    /* Reading DLL */
    hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ;
    if ( hRtfconv == NULL ) {
        return 1 ;
    }

#ifdef UNICODE
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ;
#else
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ;
#endif
    if ( pRtfconvEx == NULL ) {
        FreeLibrary( hRtfconv ) ;
        return 1 ;
    }

    /* Options */
    FontInfo.pEuropean = "Arial" ;
    FontInfo.pJapanese = "MS Pゴシック" ;
    RtfconvExInfo.pFontInfo = & FontInfo ;

    /* Conversion */
    pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.rtf"), CP_JAPANESE, 0, & RtfconvExInfo ) ;

    /* Finalization */
    FreeLibrary( hRtfconv ) ;
    return 0 ;
}




/**** 使用例 6 ****/

/* 日本語のテキストファイル "c:\foo.txt" を リッチテキストフォーマットに変換し、*/
/* "c:\poo.rtf" に出力する。                                                    */
/* 1バイト文字・2バイト文字ともに "MS Pゴシック" で出力する。              */

#include <windows.h>
#include "rtfconv.h"

typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName,
     int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ;


int main () {

    /* DLL */
    HINSTANCE hRtfconv ;
    RTFCONVEX pRtfconvEx ;

    /* Structures */
    RTFCONVEXINFO RtfconvExInfo = { sizeof(RTFCONVEXINFO) } ;
    RTFFONTINFO FontInfo = { sizeof(RTFFONTINFO) } ;

    /* Reading DLL */
    hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ;
    if ( hRtfconv == NULL ) {
        return 1 ;
    }

#ifdef UNICODE
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ;
#else
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ;
#endif
    if ( pRtfconvEx == NULL ) {
        FreeLibrary( hRtfconv ) ;
        return 1 ;
    }

    /* Options */
    FontInfo.pJapanese = "MS Pゴシック" ;
    RtfconvExInfo.pFontInfo = & FontInfo ;
    RtfconvExInfo.dwConversionMode = CONVMODE_USE_LOCAL_FONT ;

    /* Conversion */
    pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.rtf"), CP_JAPANESE, 0, & RtfconvExInfo ) ;

    /* Finalization */
    FreeLibrary( hRtfconv ) ;
    return 0 ;
}




/**** 使用例 7 ****/

/* ウクライナ語(KOI8-U)のテキストファイル "c:\foo.txt" を リッチテキストファイル */
/* に変換し、"c:\poo.rtf" に出力する。キリル文字を出力するときは、ウクライナ語の言 */
/* 語識別子を出力する                                                              */

#include <windows.h>
#include "rtfconv.h"

typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName,
     int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ;


int main () {

    /* DLL */
    HINSTANCE hRtfconv ;
    RTFCONVEX pRtfconvEx ;

    /* Structures */
    RTFCONVEXINFO RtfconvExInfo = { sizeof(RTFCONVEXINFO) } ;

    RTFLANGIDINFO LangIdInfo [] = {
    	{ 0x0400, MAKELANGID( LANG_UKRAINIAN, SUBLANG_DEFAULT ) },    /* Cyrillic (0x0400〜0x04FF) */
    } ;

    /* Reading DLL */
    hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ;
    if ( hRtfconv == NULL ) {
        return 1 ;
    }

#ifdef UNICODE
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ;
#else
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ;
#endif
    if ( pRtfconvEx == NULL ) {
        FreeLibrary( hRtfconv ) ;
        return 1 ;
    }

    /* Options */
    RtfconvExInfo.pLangIdInfo = LangIdInfo ;
    RtfconvExInfo.nNumberOfLangIdInfo = sizeof(LangIdInfo) / sizeof(LangIdInfo[0]) ;

    /* Conversion */
    pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.rtf"), CP_CYRILLIC_KOI8U, 0, & RtfconvExInfo ) ;

    /* Finalization */
    FreeLibrary( hRtfconv ) ;
    return 0 ;
}




/**** 使用例 8 ****/

/* Unicode のテキストファイル "c:\foo.txt" をリッチテキストフォーマット "c:\poo.rtf" */
/* に出力する。彝文字にはフォント "SIL Yi" を出力する。                              */

#include <windows.h>
#include "rtfconv.h"

typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName,
     int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ;


int main () {

    /* DLL */
    HINSTANCE hRtfconv ;
    RTFCONVEX pRtfconvEx ;

    /* Structures */
    RTFCONVEXINFO RtfconvExInfo = { sizeof(RTFCONVEXINFO) } ;

    RTFFONTEXINFO FontExInfo [] = {
        { 0xA000, "SIL Yi" },      /* Yi Syllables (0xA000〜0xA48F) */
        { 0xA490, "SIL Yi" },      /* Yi Radicals  (0xA490〜0xA4CF) */
    } ;

    /* Reading DLL */
    hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ;
    if ( hRtfconv == NULL ) {
        return 1 ;
    }

#ifdef UNICODE
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ;
#else
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ;
#endif
    if ( pRtfconvEx == NULL ) {
        FreeLibrary( hRtfconv ) ;
        return 1 ;
    }

    /* Options */
    RtfconvExInfo.pFontExInfo = FontExInfo ;
    RtfconvExInfo.nNumberOfFontExInfo = sizeof(FontExInfo) / sizeof(FontExInfo[0]) ;

    /* Conversion */
    pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.rtf"), CP_UTF16, 0, & RtfconvExInfo ) ;

    /* Finalization */
    FreeLibrary( hRtfconv ) ;
    return 0 ;
}




/**** 使用例 9 ****/

/* Unicode のテキストファイル "c:\foo.txt" を日本語のテキストファイルに変換し、    */
/* "c:\poo.txt" に出力する。変換できない文字はひとつの ? を出力する。              */

#include <windows.h>
#include "rtfconv.h"

typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName,
     int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ;


int main () {

    /* DLL */
    HINSTANCE hRtfconv ;
    RTFCONVEX pRtfconvEx ;

    /* Structures */
    RTFCONVEXINFO RtfconvExInfo = { sizeof(RTFCONVEXINFO) } ;

    /* Reading DLL */
    hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ;
    if ( hRtfconv == NULL ) {
        return 1 ;
    }

#ifdef UNICODE
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ;
#else
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ;
#endif
    if ( pRtfconvEx == NULL ) {
        FreeLibrary( hRtfconv ) ;
        return 1 ;
    }

    /* Options */
    RtfconvExInfo.pUnmappableCharFormat = "?" ;
    RtfconvExInfo.dwConversionMode = CONVMODE_OUTPUT_CODE_NUMBER ;

    /* Conversion */
    pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.txt"), CP_UTF16, CP_JAPANESE, & RtfconvExInfo ) ;

    /* Finalization */
    FreeLibrary( hRtfconv ) ;
    return 0 ;
}




/**** 使用例 10 ****/

/* 中国語簡体字のテキストファイル "c:\foo.txt" を日本語のテキストファイルに変換し、*/
/* "c:\poo.txt" に出力する。変換できない文字は [UC+%04X] でUnicodeのコード番号を出 */
/* 力する。                                                                        */

#include <windows.h>
#include "rtfconv.h"

typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName,
     int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ;


int main () {

    /* DLL */
    HINSTANCE hRtfconv ;
    RTFCONVEX pRtfconvEx ;

    /* Structures */
    RTFCONVEXINFO RtfconvExInfo = { sizeof(RTFCONVEXINFO) } ;

    /* Reading DLL */
    hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ;
    if ( hRtfconv == NULL ) {
        return 1 ;
    }

#ifdef UNICODE
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ;
#else
    pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ;
#endif
    if ( pRtfconvEx == NULL ) {
        FreeLibrary( hRtfconv ) ;
        return 1 ;
    }

    /* Options */
    RtfconvExInfo.pUnmappableCharFormat = "[UC+%04X]" ;
    RtfconvExInfo.dwConversionMode = CONVMODE_OUTPUT_CODE_NUMBER ;

    /* Conversion */
    pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.txt"), CP_CHINESE_SIMPLIFIED, CP_JAPANESE, & RtfconvExInfo ) ;

    /* Finalization */
    FreeLibrary( hRtfconv ) ;
    return 0 ;
}



変換テーブルについて


1. 異体字の変換

   「RTFコンバータ」の大きな特長の一つに「異体字の変換を行なう」という点が挙げられます。この異体字の変換はデフォルトで行なわれるため、どのようなときに異体字の変換が行なわれるかをプログラマが把握しておかないと、時に意図せぬ変換が行なわれることにもなりかねません。デフォルトで異体字の変換が行なわれるのは、次の文字コー ドでの変換においてです。

日本語・中国語・韓国語間での変換異体字に変換する
中国語簡体字・中国語繁体字間での変換異体字に変換する
ヨーロッパの各文字コード間での変換出力できない文字のみ異体字に変換する
Unicodeから東アジアの文字コードへの変換異体字に変換する
Unicodeからヨーロッパの文字コードへの変換出力できない文字のみ異体字に変換する

   次のような場合には異体字の変換は行なわれません。

日本語(Shift-JIS・EUC-JP・ISO-2022-JP)間での変換異体字には変換しない
韓国語(EUC-KR・Johab)間での変換異体字には変換しない
UTF-16, UTF-16(Big Endian), UTF-8 間での変換異体字には変換しない
Unicodeで出力異体字には変換しない
リッチテキストで出力異体字には変換しない

   「日本語→Unicode→日本語」のように変換を行なうと、後半の「Unicode→日本語」の段階で異体字の変換が行なわれ、第2水準の漢字の多くが、対応する第1水準の漢字に変換されます。

   この異体字の変換を抑止するには、RTFCONVEXINFO 構造体 の dwConversionMode に明示的に CONVMODE_NO_VARIANT (または CONVMODE_NO_VARIANT_KANJI と CONVMODE_NO_VARIANT_EUROPEAN) を指定しなければなりません。

   リッチテキストからテキストへの変換時には、リッチテキスト中のフォントの文字セットを見て、上記の原則に準じて異体字の変換を行うかどうか判断します。

2. 変換テーブル

   RTFCONV.DLL は実行時に、変換テーブルを、まず OS から探します。もし OS に変換テーブルが見つからない場合は、RTFCONV.DLL と同じディレクトリにある SBCTBL.DLL と MBCTBL.DLL から探します。OS に変換テーブルが見つからず、かつ、SBCTBL.DLL と MBCTBL.DLL が存在しないか、SBCTBL.DLL と MBCTBL.DLL にも変換テーブルが見つからないときは、変換は失敗し、エラーを返します。

   この動作は、RTFCONVEXINFO 構造体 の dwConversionMode に CONVMODE_USE_DLL_TABLE または CONVMODE_USE_SYSTEM_TABLE を指定することにより、制御することが可能です。たとえば、OS に何らかの問題がある場合、CONVMODE_USE_DLL_TABLE を指定すれば、OS の変換テーブルを検索せずに、SBCTBL.DLL と MBCTBL.DLL のみ使用します。

   あらかじめ OS に変換テーブルが存在することが確実であり、すべて OS の変換テーブルを参照して変換を行ないたいときは、SBCTBL.DLL と MBCTBL.DLL をインストールする必要はありません。CONVMODE_USE_SYSTEM_TABLE を指定する必要もありません。これは、たとえば 日本語 Windows 上で日本語のみのファイルを扱うような場合が当てはまります。

3. 日本語 EUC の入出力

   日本語 EUC の入出力時に、JIS X 0212(補助漢字)に相当する文字が含まれていた場合、RTFCONV.DLL は MBCTBL.DLL の補助漢字変換テーブルを参照しようとします。MBCTBL.DLL が見つからないときは、システムの CP20932 の変換テーブルから補助漢字の変換を試みます。

   MBCTBL.DLL が見つからない、あるいは RTFCONVEXINFO 構造体 の dwConversionMode に CONVMODE_USE_SYSTEM_TABLE を指定して MBCTBL.DLL への参照を抑止した場合で、かつ CP20932 の変換テーブルが見つからない場合は、補助漢字を変換することができません。(変換不可能な文字と見なされます。エラーは出しません。)現在の環境で補助漢字が変換できるかを確認するには、次のような判定法を使うことができます。

    int IsHojoKanjiAvailable ( void ) {
        int result = RtfconvCharEx ( 0x8FB0A1, CP_EUC_JAPANESE, CP_UTF16, NULL ) ;
        if ( result == -1 ) return 0 ;    /* 補助漢字は変換不可 */
        else                return 1 ;    /* 補助漢字は変換可能 */
    }

4. 中国語繁体字 HKSCS と EUC-TW の入出力

   中国語繁体字 HKSCS の入出力では、RTFCONV.DLL はつねに SBCTBL.DLL と MBCTBL.DLL を参照します。システムに Microsoft HKSCS モジュールがインストールされていると、中国語繁体字 BIG5 も中国語繁体字 HKSCS も、SBCTBL.DLL と MBCTBL.DLL を参照するようになります。変換できないときは、エラーを返します。

   中国語繁体字 EUC-TW の入出力では、RTFCONV.DLL は CNSTBL.DLL を参照します。変換できないときは、エラーを返します。

5. JIS2004 の入出力

   日本語の入出力で、RTFCONVEXINFO 構造体 の dwAdditionalMode に ADDITIONAL_MODE_JIS_INPUT_2004 または ADDITIONAL_MODE_JIS_OUTPUT_2004 を指定して JIS X 0213:2004 の変換を行うとき、RTFCONV.DLL は MBCTBL.DLL の変換テーブルを参照しようとします。変換できないときは、エラーを返します。