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版分ける。