コード ページの競合の例

Visual Studio では、WPF ユーザー インターフェイスおよび WCF ユーザー インターフェイスへのプログラム アクセスを提供するために、COBOL にパーシャル クラスを作成します。これらのパーシャル クラスは、自動的に生成された後、ユーザーまたは Visual Studio が更新できるようになっています。

次の例を考えます。


PicLen.cbl が既存のコードまたは新しい手入力のソース ファイルである場合、プラットフォームのデフォルトのコード ページではエンコードされません。たとえば、デフォルトのコード ページは、イギリスの場合は 1252、日本語ロケールのマシンの場合は大抵 Shift-JIS のコード ページ 932 です。

次のように PicLen が WindowStuff から呼び出されると、1 つのコード ページが別のコード ページを呼び出します。
       call "PicLen" using stuff lStuff

コード ページ間での相互の呼び出しは直接的にはサポートされていません。COBOL ランタイム システムによって、アプリケーションの実行時にエラーが生成されます。Window1 用の次のソース コードには、この問題に対処し、例外を表示するコードが示されています。

try
           set stuff to self::textBox1::Text
           call "PicLen" using stuff lStuff
           move lStuff to nStuff
           set self::textBox2::Text to nStuff::ToString()
       catch ex
           set self::textBox3::Text to ex::Message
       end-try

PicLen と Window1 が異なるコード ページでエンコードされている場合、アプリケーションによって次の例外が生成されます。

198 Load failure [Program has an incompatible codepage dependency 
CodePageStuff.StrLen is using codepage Western European (Windows) 
but the first program CodePageStuff.Window1 is using Unicode (UTF-8)]