2007年9月11日火曜日

VC++2005 で CreateFile 問題解決

VC++2005 で シリアルポートがやっと使えるようになりました。

VC++6.0 で動いていたソースですが、 VC++2005 上でコンパイルすると、CreateFile でエラーが発生します。

[ソース]
Shandle = CreateFile( "COM1" , GENERIC_READ | GENERIC_WRITE , 0 , NULL , OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL );

[エラー]
error C2664: 'CreateFileW' : 1 番目の引数を 'char [256]' から 'LPCWSTR' に変換できません。

そこで、エラーがでないようにキャストするとエラーは無くなります。

[ソース]
Shandle = CreateFile( (LPCWSTR)"COM1" , GENERIC_READ | GENERIC_WRITE , 0 , NULL , OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL );

しかし、ハンドルが取得できませんでした。

■解決方法
VC++2005 で CreateFile と記述すると、CreateFileW になってしまうため、"COM1"などのシリアルポートのハンドルが取得できなくなると思います。
そこで、 CreateFileA を使用します。

[ソース]
Shandle = CreateFile( "COM1" , GENERIC_READ | GENERIC_WRITE , 0 , NULL , OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL );

これで、ハンドルが正常に取得できるようになりました。

0 件のコメント: