「FAQ」カテゴリーアーカイブ

Curlに関するFAQのページです

エラーメッセージ:「InternetReadFileEx に失敗しました: (12031)」

◆ご質問◆
予期していないアプレット例外が発生し、「InternetReadFileEx に失敗しました: (12031)」というメッセージが表示されました。
これはどのようなときに発生するのでしょうか。

◆回答◆
Curlは通信にWindows APIのWinInetを利用しております。
今回のエラーはWinInetが出力したものであり、CurlはWinInetから受け取ったエラーを表示しているにすぎません。

エラーの原因はエラーコード(12031)より
「サーバとのコネクションが切断した」ためであると考えられます。

“パケットの情報”や”サーバのログ”、”ネットワーク障害が生じていないか”などをご確認ください。

多言語対応について

【ご質問】
中国語・韓国語の対応を検討しています。
Curlでは上記言語の対応はされているのでしょうか。

【回答】
Curlで正式にサポートしている言語は日本語と英語のみです。
中国語・韓国語の動作保障はしておりません。

「動作保障はしていない」ことは「動作しない」ことを意味するものではありません。

※バージョン8.0.1から韓国語版の提供を行っています。
バージョン8.0.1から韓国語版のインストーラの提供を行っています。
以下のページをご参照ください。
http://www.curl.com/ko/download/

独立型アプレットのOCC機能について

【ご質問】
独立型アプレットでのオフライン実行(OCC)は可能でしょうか。
可能な場合実行するためのURLはどうなるのでしょうか。

【回答】
独立型アプレットでもオフライン実行は可能です。
URLも通常通り以下のようになります。

 RTEバージョンが7以前:
 ”curl://occ/http://Webサーバ/~”

 RTEバージョンが7以降:
 ”curl://offline/http://Webサーバ/~”

※バージョン7以降でも以前のバージョンとの整合性を保つために
  curl://occ が利用可能です。

詳細は、Curl開発者ガイドの
[外部リソースとの対話]-[随時接続コンピューティング (OCC)]
の項をご参照ください。

パーシスタントキャッシュ機能について

【ご質問】
キャッシュ設定の最大値を超えてキャッシュさせた場合、
設定を超えた分のキャシュはどのタイミングで削除されるのでしょうか。

またその際、LRU(Least Recently Used)方式と
LFU(Least Frequently Used)方式どちらで削除されるのでしょうか。

【回答】
新しくパッケージキャッシュが作成されるタイミングで削除するかどうかの処理が実行されます。
また、Curlコントロールパネルでキャッシュの最大サイズを設定した時も実行されます。
(最大サイズの設定を行った際に、最大サイズ以上のキャッシュが存在した場合に削除されます。)

キャッシュ削除の際にはLRU方式で削除されます。

デジタル証明書について

【ご質問】
Curlアプリケーションを起動するための実行ファイル(surge-do.exe)に
デジタル署名が存在しないのですが、これは仕様なのでしょうか。

【回答】
現在の仕様ではsurge-do.exe等をはじめとするCurlアプリケーションを起動する為の
実行ファイルにはデジタル署名をつけておりません。
本来surge-do.exe等はユーザが個別に実行させるものではないという観点から
デジタル署名をつけておりません。

バージョン7以前のデザインへ変更するには

【ご質問】
Curl7.0からスキンコントロールが標準導入され、スキンが適用されたデザインになっていますが、
Curl6.0のようなクラシックなデザインに変更するには、どうしたらよいのでしょうか。

【回答】
“install-standard-look-and-feel”プロシージャを使用することで実現可能です。

詳細は、APIリファレンスの
[CURL.GUI.STYLED-CONTROLS]-[install-standard-look-and-feel]
の項をご参照ください。 

RecordGridの列の表示・非表示

【ご質問】
RecordGridにおいて、特定の列の表示・非表示を切り替えるにはどのようにすればいいのでしょうか。

【回答】
RecordGridクラスのbase-columnsアクセサに、
表示したいRecordGridColumnの配列を設定することで
任意の列を表示することができます。

詳細は、Curl開発者ガイドの
[データの管理と表示]-[データ レコードとグリッド]-[RecordGrid の外観の変更]-[カスタム列の作成]
の項とAPIリファレンスの
[CURL.GUI.CONTROL-LOGICAL]-[RecordGrid]
の項内のプロパティ[base-columns]の項をご参照ください。 

カレンダーコントロールで表示する順序を任意に設定するには

【ご質問】
Curl標準のカレンダーコントロールにて、スピンコントロールが月→年の順に表示されていますが、
年→月の順とすることは可能でしょうか。

【回答】
CalendarControlに用意されているオプション等を設定するだけで、
スピンコントロールの並びを任意に変えることは出来ません。

しかし、CalendarControlのグラフィック階層をたどる方法で変更することは可能です。
この方法は、CalendarControlのグラフィック階層は固定であるということを前提としています。
バージョンが代わった際にCalendarControlのグラフィック階層が変更されていると、
この方法は使えなくなりますので御注意下さい。

詳細は以下のサンプルをご参照ください。

{curl 7.0,8.0 applet}
{curl-file-attributes character-encoding = “shift-jis”}

{value
    let calendar:CalendarControl = {CalendarControl}
    let cal-ui:SkinnableCalendarControlUI = calendar.ui-object asa SkinnableCalendarControlUI
    let internal-frame:Frame = {cal-ui.graphical-children.read-one} asa Frame
    let internal-grid:Grid = {internal-frame.graphical-children.read-one} asa Grid
    let calendar-objects:{Array-of Graphic} = {{Array-of Graphic}}
    {for g:Graphic in internal-grid.graphical-children do
        {calendar-objects.append g}
    }

    def v-fid = {GridFiducial internal-grid, horizontal? = false}
    def h-fid = {GridFiducial internal-grid, horizontal? = true}

    {internal-grid.add
        calendar-objects[1],
        left = {internal-grid.left}, top = {internal-grid.top},
        right = v-fid, bottom = h-fid
    }   
    {internal-grid.add
        calendar-objects[0],
        left = v-fid, top = {internal-grid.top},
        right = {internal-grid.right}, bottom = h-fid,
        vorigin = {internal-grid.vorigin-fiducial}
    }
    {internal-grid.add
        calendar-objects[2],
        left = {internal-grid.left}, top = h-fid,
        right = {internal-grid.right}, bottom = {internal-grid.bottom}
    }

    {Table columns = 2,
        {text 通常のCalendar}, {text カスタマイズしたCalendar},
        {CalendarControl}, calendar
    }
}

HttpCookie.max-ageについて

【ご質問】
APIリファレンスの[HttpCookie(クラス)]の項内に、
HttpCookie.max-ageフィールドは
「完全にサポートされていない場合があります」
との記述がありますが、これはmax-ageフィールド値を
Curl上で適切に設定・参照できない場合があるということでしょうか。

【回答】
max-ageフィールド値を参照できない場合があります。

ブラウザによってCookieに対する実装が異なるためです。
「ブラウザの種類」や「Cookieの独自拡張」によって、ブラウザがmax-ageフィールドを
読み取れるかどうかが変わります。
Curlとしては”max-age フィールド”を保持していますが、ブラウザからの情報に
“max-age フィールド”が存在しない場合は、当然、値を参照することができません。

そのため、ドキュメントには、「完全にサポートされていない場合があります」と記述しております。

Cookieの保存領域について

【ご質問】
CurlでHttpCookieを作成した場合、どこに保存されるのでしょうか。
IEとは違う場所に保存されるのでしょうか。

【回答】
CurlでHttpCookieを作成した場合でも保存領域はIEと同じです。
つまり、有効期限付きCookieは一時ファイルの保存領域に保存されます。

具体的にどのフォルダに保存されるかに関してはOS・IEのバージョンによって異なります。

予期しない例外発生時のハンドリング

【ご質問】
Curlアプリケーションにおいて、予期されない例外(プログラムの不具合など)が発生した場合に、
ハンドリングすることは可能でしょうか。

【回答】
予期されない例外(catchされなかった)等が発生した場合は、
通常であれば、そのまま”アプリケーションが落ちる”(exitが呼ばれる)ということになります。
しかし、install-unexpected-exception-handlerを使ってプロシージャを登録しておくと、
そのプロシージャをexitが呼ばれる前に実行させる事が出来ます。

詳細は以下のサンプルをご参照ください。

{curl 6.0,7.0,8.0 applet}
{curl-file-attributes character-encoding = “shift-jis”}

{install-unexpected-exception-handler
    {proc {exception:Exception, backtrace:String}:void
        {popup-message “システムエラーが発生しました”}
        {dump exception.value}
        {dump backtrace}
    }
}

{View
    {Frame width = 8cm, height = 8cm,
        {CommandButton label = “システムエラーを発生させる(ダミー)“,
            {on Action do
                {throw {Exception “○○エラーです”}}
            }
        }
    },
    visibility = “normal”,
    {on WindowClose do
        {exit}
    }
}

独立型アプレットのCookieの引き継ぎについて

◆ご質問◆
既にcookieが設定されているブラウザのページから、独立型アプレットを起動した場合、
ブラウザで設定したCookieを引き継ぐことは可能でしょうか。

◆回答◆
ほとんどの場合Cookieを引き継ぐことは出来ません。

独立型アプレットでは、request-browser-resident-httpは利用できません。
詳細についてはCurl開発者ガイドの
[コンテンツの構成要素] →[独立型アプレット]→[APIの相違点]の項
をご参照ください。

インターネットエキスプローラの期限付きクッキー以外の場合、Cookie情報を、ブラウザに付与したものを独立型アプレットで共有する場合は、
サーバ側で独立型アプレットのソースを動的に生成して、その動的に生成するコードで
“set-insecure-http-cookie”プロシージャ等を利用して、ブラウザに付与したCookie情報を書き出し、
アプレット内で設定する方法等が考えられます。

クッキー情報の共有方法について、以下のページもご参照ください。

Cookieを引き継ぐ方法

シンクライアント対応について

◆ご質問◆
シンクライアント対応状況についての質問です。
方式が何種類か存在しますが、以下の方式はCurlには対応しているのでしょうか。

1.ネットワークブート方式
2.ブレードPC方式
3.仮想PC方式

◆回答◆
シンクライアント環境の対応につきましては、ご指摘の3つの環境
いずれについても今までにテストされた事はありません。
また、今後についても今のところテストをする予定はありません。

基本的な考え方として、Curlがサポートする環境は、Microsoftが想定している
Windowsの起動の仕方である場合のみになります。
上記の点を考慮した上で、リモートデスクトップ環境はMicrosoftが
OSの機能として提供するものになりますので、
Curlが動作しなければならない環境と解釈できる部分があります。

しかしながら、リモートデスクトップ環境の場合、
描画におけるパフォーマンスの問題があり、必然的にCurlもこの影響を受けてしまいます。
例えば、画面がコマ送りになったりアニメーションが
スローモーションになるなどがこれに当たります。

振り仮名を取得したい

【ご質問】
漢字入力した文字列の振り仮名を「半角カナ文字」で表示を行いたいのですが、
どのようにしたらよいのでしょうか。

【回答】
CompositionResultEvent.reading-stringを用いることで実現可能です。

詳細は以下のサンプルをご参照ください。

{curl 6.0,7.0,8.0 applet}
{curl-file-attributes character-encoding = “shift-jis”}

{let input:String = “”}
{let tf:TextField = {TextField}}
{let td:TextDisplay = {TextDisplay}}

{tf.ui-object.add-event-handler
    {on e:CompositionResultEvent do
        set input = e.reading-string
    }
}

{tf.add-event-handler
    {on e:ValueChanged do
        set td.value = input
    }
}

{value
    {VBox
        spacing = 10pt,
        tf,
        td
    }
}

VLEのバージョンについて

【ご質問】
IDEおよびRTEはversion 5を使用していますが、VLEで生成したソースは
version 3.0となっています。
上記のようにversionが異なることは問題ではないのでしょうか。

【回答】
以下はVLEで生成したソースに記述されているimport文です。

{import * from COM.CURL.LAYOUT-EDITOR.RUNTIME-SUPPORT,
    version = “3.0”
}

上記import文中の”3.0″は、Curlを実行するRTEのバージョンではなく、
パッケージのバージョンです。

開発者がパッケージを作成したので、1.0と記述した。
→バグを修正したのでバージョンを2.0に変更した。
→大幅な機能を追加したのでバージョンを5.0に変更した。

上記のような単純な”バージョン”であり、動作するCurlRTEのバージョンではありません。

上記のimport文はバージョン3.0のパッケージ
「COM.CURL.LAYOUT-EDITOR.RUNTIME-SUPPORT」
をインポートすることを意味しています。

詳細は、Curl開発者ガイドの
[コンテンツの構成要素]-[パッケージ]-[import 式]
の項をご参照ください。

基点をずらしてグラフを表示させるには

【ご質問】
BarLayer等でデータ毎に起点を指定して表示させることは可能でしょうか。

【回答】
基点の位置をずらすようなAPIは標準で用意されていませんが、
透明なレイヤを表示させることで実現可能かと思います。

詳細は以下のサンプルをご参照ください。

{curl 6.0,7.0,8.0 applet}

{import * from CURL.GUI.CHARTS}

{define-proc package {v-gradient
                                   start-color:FillPattern,
                                   highlight-color:FillPattern,
                                   end-color:FillPattern,
                                   highlight-pos:double = 0.5
                               }:FillPattern
    {return
        {LinearGradientFillPattern
            {Fraction2d 0, 0},
            {Fraction2d 0, 1},
            {Spectrum.from-envelope
                start-color,
                0.0,
                highlight-color,
                highlight-pos,
                end-color,
                1.0
            }
        }
    }
}

{let records:RecordSet =
    {RecordSet
        {RecordFields
            {RecordField
                “Region”,
                domain = String
            },
            {RecordField “M1”, caption = “January”, domain = int},
            {RecordField “M2”, caption = “February”, domain = int},
            {RecordField “M3”, caption = “March”, domain = int}
        },
        {RecordData Region = “North”, M1 = 100, M2 = 140, M3 = 130 },
        {RecordData Region = “East”, M1 = 110, M2 = 140, M3 = 170},
        {RecordData Region = “South”, M1 = 140, M2 = 100, M3 = 130},
        {RecordData Region = “West”, M1 = 160, M2 = 190, M3 = 140}
    }
}

{let chart:LayeredChart =
    {LayeredChart
        width = 10cm,
        height = 6cm,
        flipped? = true,
        legend-enabled? = false,
        color-palette =
            {new {Array-of FillPattern},
                {v-gradient “transparent”, “transparent”, “transparent”},
                {v-gradient “blue”, “lavender”, “steelblue”},
                {v-gradient “red”, “mistyrose”, “crimson”}
            },
        bar-border-width = 0px,
        {BarLayer
            stacking-mode = ChartStackingMode.stacked,
            {ChartDataSeries records, “M1”},
            {ChartDataSeries records, “M2”},
            {ChartDataSeries records, “M3”},
            x-axis-data = {ChartDataSeries records, “Region”}
        }
    }
}

{value
    chart
}

WinInetのエラーを取得するには

【ご質問】
Microsoft Win32 Internet (WinInet)のエラーを
Curlにてキャッチすることは可能でしょうか。

【回答】
WinInetでのエラーはCurl内ではHttpException等によってラップされ
アプリケーションに伝えられます。
しかし、WinInetのエラーが返ってきた場合に直接Curlアプリケーションから
キャッチすることは標準APIではできません。

ただし、HttpException.message内にWinInetのエラーコードが
含まれることがありますので、それを文字列解析して取得することは可能です。

TranscodingIOExceptionについて

◆ご質問◆
CsvDataWriterを利用してUTF-8の入力データをshift-jisで出力しようとしています。

その際にUTF-8のみに存在する文字が存在した場合、”TranscodingIOException”が発生してしまいます。
Exceptionを発生させずに文字化けしてでも入力データの最後まで出力させることは可能でしょうか。

◆回答◆
今回の場合、UTF-8で表現可能な文字に対応する文字コードがshift-jisには存在しないため、
“TransEncodingException”が発生しました。

そのため、残念ながらUTF-8にしか存在しない文字をshift-jisで
(文字化けの状態を含め)出力することは不可能です。

TransEncodingExceptionが発生した場合にも出力を行うためには、
例えばエラーが発生した際に読み込みに使用した文字コードではなく
別の文字コードを指定し読み込み直すといった処理が考えられます。

プリンタの両面・片面印刷の制御について

【ご質問】
Curl Ver.7では印刷機能にて、両面・片面印刷の制御は可能でしょうか。

【回答】
Curlから印刷ダイアログを呼び出し、そこからプリンタのダイアログを呼び出して、
片面/両面印刷を指定することは可能です。
Curlのプログラムの中で片面/両面印刷を明示的に指定することは
残念ながらVer7.0及びにそれ以前のバージョンにおいては不可能です。

※Curlバージョン8では片面/両面印刷の指定が可能になっています。
印刷機能の強化によってprint-graphicプロシージャにて片面/両面印刷指定が可能になっています。
以下のページをご参照ください。
http://developers.curlap.com/re-reference/56-print/744-print-graphic.html