閉じる

interface社の GPC2000

DIOをオープンする関数の宣言はこんな感じ。

#ifdef _WIN64
FBIDIOAPI HANDLE WINAPI DioOpen( LPCSTR lpszName, DWORD fdwFlags );
#else
FBIDIOAPI HANDLE WINAPI DioOpen( LPCTSTR lpszName, DWORD fdwFlags );
#endif

32bit環境では ANSI版と UNICODE版が用意されているのか。
今回のアプリは UNICODEなので、こんな感じで大丈夫だな。

Handle hDevice=DioOpen(_T("FBIDIO1"),FBIDIO_FLAG_SHARE);

おかしい…オープンに失敗する。

しばし試行錯誤した後に気がつく。
「まてよ?引数が LPCTSTRなのに単一ライブラリでエントリが一つだけってどういう事だ?」*1

試しに以下のようなコードで動かしてみる。

Handle hDevice=DioOpen(reinterpret_cast<LPCTSTR>("FBIDIO1"),FBIDIO_FLAG_SHARE);

動く…_no
馬鹿なのか?もしかして馬鹿なのか?
なにか大きな罠があるのか?

ヘルプを「UNICODE」で検索してみると…まんまのコードが書いてある…_no

何のために LPCTSTRにしたんだ?


*1 通常、このような場合には DioOpenA/DioOpenWという風に ANSI版と UNICODE版のエントリを別に用意し、ヘッダ内で DioOpenをどちらかに置き換えるかライブラリ自体を ANSI版と UNICODE版分ける。

コメントを残す

メールアドレスが公開されることはありません。必須項目には印がついています *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)