2015年5月12日火曜日

Windows:ハマったところ

現在自作のアプリでFM音源を鳴らしたくて、X68sound.dllを組み込めるか実験中。
10年以上前のソースコードとの格闘中に色々とハマったのでメモ。

■CからC++へ
元々のソースコードはCで記述してあるので、関数の宣言時にヘッダに初期値を
入れる事ができていた。ヘッダへ初期値を入れる場合はC++の場合はクラス化
してコンストラクタに入れるのが正しいのかな?とにかくコンパイラがエラーを
出すので、初期値をはずす。

関数呼び出し時も初期値を省くことができるCと違って、C++はちゃんと入れて
あげる必要がある。ここもハマった。

■fopenとfopen_s
昔おなじみのファイルを扱うfopenも、現在ではセキュリティの低いAPIとして
使うなと怒られる。fopenをそのままfopen_sにしてもダメで、引数と戻り値が
違うのでハマった。

if((fp = fopen(filename,"rb")) == NULL)
こんな感じのは良くみる。このifでエラー処理を入れるのが普通。

それを
if(fopen(&fp,filename,"rb") == NULL)
だけではダメで、

if(fopen(&fp,filename,"rb") != 0)
とする。ハマった。

■文字コード
昔のはマルチバイトに対応してないプロジェクトもそのままあるので、ファイルを
扱う場合はマルチバイトにする必要あり。
プロジェクト→プロパティ→構成プロパティ→全般
にある、「文字セット」を変える必要アリ。ハマった。

0 件のコメント:

コメントを投稿