この間、FileHandlerをECCSkeltonに移植してCSHELLクラスの動作確認を行いましたが、今回はTextToSpeechの移植でCVOICEクラスの動作確認を行いました。

 

結果は?

 

動作はASCII版と同じく申し分ないのですが、今までのサンプルでは全く問題が無かったにもかかわらず、バージョンダイアログのSTATICコントロール(SS_ICON)のアイコンとツールバービットマップが表示されない不具合が発生しました。(アイコンは、Explorerのexeファイルには表示されており、読み込まれていると考えられます。)

通常このような場合、

 

(1)リソースコンパイルの失敗→IDは通っているが、実体のリソースが無い。しかし、コンパイルエラーはありません。

(2)リソースID(文字列)の相違→「(間違った)IDが見当たりません」等、通常はエラーが出ます。

(3)リソースIDの文字列と定義整数の不連携→エラーは出ません。

 

「整数IDがASCIIのファイル名を参照していて、それからワイド文字列IDに連携されていないのではないか?」とも考えるのですが、リソースが正常に表示されている他のサンプルと比較しても相違が無いので、少し頭を冷やしてから再度見直します。

 

閑話休題。しかし、今頃気が付いたのですが、コンパイラーをワイド文字対応させてコンパイルしても、

 

#include        "(ファイル名)"

 

はワイド文字の 'L' を付けるとファイル名として識別されず、エラーになりますね。(従ってファイル名表記はASCIIデータのままの筈です。)

 

rcファイルも同様(例↓)ですが、

 

Borland Resource Compiler  Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation.  All rights reserved.


Error TextToSpeech.rc 6 10: Expecting filename

 

更にリソース記述の際の文字列にはLを付けるところ(例↓)、

 

(メニューの場合)

    POPUP L"ファイル(&F)"
    {
        MENUITEM
L"スクリプトの入力(&I)", IDM_INPUT
        MENUITEM
L"クリップボードから入力(&C)", IDM_CLIP
        MENUITEM
L"ファイルから入力(&O)", IDM_OPEN
        MENUITEM
L"スクリプトファイルの保存(&S)", IDM_SAVE
        MENUITEM
LEPARATOR
        MENUITEM
L"終了(&X)", IDM_EXIT
    }

 

(ダイアログの場合)

IDD_VERSION DIALOG DISCARDABLE 0, 0, 160, 64
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_MODALFRAME | DS_3DLOOK | DS_CENTER
CAPTION
L"バージョン情報"
FONT 9,
L"Times New Roman"
{
 CONTROL IDI_ICON, 0,
L"STATIC", WS_CHILD | WS_VISIBLE | SS_SUNKEN | SS_ICON, 4, 14, 18, 18
 CONTROL
L"", IDC_VERTXT, L"STATIC", WS_CHILD | WS_VISIBLE | SS_CENTER | SS_SUNKEN, 32, 10, 106, 26
 CONTROL
L"OK", IDOK, L"BUTTON", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | BS_CENTER, 66, 46, 26, 12
}

 

アイコンやビットマップなどのファイル指定の際にLを付けると(例↓)

 

IDI_ICON    ICON    DISCARDABLE    L"Icon.ico"
 

 

Borland Resource Compiler  Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation.  All rights reserved.


次のように読めてはいるのですが、
 

Error TextToSpeech.rc 97 27: Cannot open file: "Icon.ico

 

始めのダブルクォテーションが残り、エラーになります。

 

不思議ですね。