一部のPC-Talker対応のアプリケーションで、PC-Talkerのバージョンが変わるとPC-Talkerから音声が出ないように工夫されているソフトが報告されています。
そのソフトの誤動作として、PC-Talkerのバージョンではなく、配布可能な開発用共有DLL(PCTKUSR.DLL)のリソースのファイルバージョンをチェックして いるため、開発キットをバージョンアップすると、音声が出力されなくなる現象があるようです。
PC-Talkerのバージョンをチェックして、PC-Talkerへの対応を変更する場合は、SDK記載の正しい取得方法をご利用ください。
バージョンの取得方法は簡単です。ソースに以下のコードを記述するだけで、PC-Talkerのバージョンを取得できます。
※PCTKUSR.DLLを使用している状態で、公開関数 PCTKGetVersion を使用します。
16進数(BCD)でバージョンが返されます。
例:Ver.3.45 → 0x03040500 Ver.5.12 → 0x05010200
注意:PC-Talker XP Ver.1.10では、マイナーバージョンがBCDではなく、そのままの16進数で返していました。この現象は、Ver.1.12で修正されています。
※PCTalker XP、VDMW300は、Ver.1.00の場合、0x06000000を返します。
例:PC-Talker XP Ver.1.23 → 0x06020300
※PCTalker,VDM系の公開APIにつきましては、すべて同じ仕様です。
※PC-Talker Ver.3.0以上で、このファンクションが使用可能です。それ以前のバージョンでも、新しい共有DLLをインストールすることで取得が可能です。
■LIBを使用した場合
ライブラリを使用した場合は、最新のPCTKUSR.DLLを配布するようにします。
LIBを使用した場合のサンプル例です。以下の1行で取得が可能です。
dwVersion= PCTKGetVersion(); //dwVersion にバージョンが取得されます。
■ロードライブラリを使用した場合
ロードライブラリを使用した場合のサンプル例です。
typedef DWORD (*PCTKGETVERSION)(void);
HMODULE hModule;
DWORD dwVersion;
PCTKGETVERSION PCTKGetVersion;
//PCTKUSR.DLLをロードします。
if((hModule = LoadLibrary( "PCTKUSR.DLL" ))){
if((PCTKGetVersion = (PCTKGETVERSION)GetProcAddress(hModule,"PCTKGetVersion")))
dwVersion = PCTKGetVersion(); //dwVersion にバージョンが取得されます。
}
if( dwVersion >= 0x06000000 ){;
// ここにPCTalker XP Ver.1.0 または、VDMW300 以上の処理を記述します。
}
プログラム例 ボタンを押すとバージョンが表示されます。
'バージョンの取得関数はすべて大文字でPCTKGETVERSIONと記述します。(WINAPI)
Private Declare Function PCTKGETVERSION Lib "pctkusr.dll" () As Long
Private Sub Command1_Click()
'PC-Talkerのバージョンが表示されます。
MsgBox "PC-Talkerのバージョンは" & Hex$(PCTKGETVERSION()) & "です。"
End Sub
共有DLLのPCTKUSR.DLLのインストール場所
PC-Talker Ver.1〜Ver.5は、インストールでWindowsフォルダに登録されています。
PC-Talker XPでは、システムフォルダにPCTKUSR.DLLが配布される問題を解決するために、WindowsとSystem32フォルダの両方に登録されています。System32フォルダが優先されます。
PCTKUSR.DLLをご利用の際の注意事項です。
PCTKUSR.DLLを配布される場合で、WindowsまたはSystemフォルダにコピーされる場合は、最新のバージョンを配布してください。カレントフォルダでお使いの場合も同様にできるだけ最新のバージョンをお使いください。
配布する場合、PCTKUSR.DLLの日付またはバージョンが新しい場合に上書きしてください。
PCTKUSR.DLLは上位互換DLLです。古いバージョンのものを上書きすると、PC-Talkerの動作が不安定になりますので注意してください。