プログラマのつれづれなるままにプログラマのつれづれなるままに音宮志久が思ったことなどをネタにします。プログラムネタ・数学ネタがメインです。COMとHRESULTCOMとHRESULTコメントを残す昨日の説明で一カ所間違いがありました。いうか見逃していました。アスペクト比を維持して表示するための動作として3つ(何もしない、ソフトウェア拡大、変形マッチング)がありましたが、もう一つ確認しました。画面中央に拡大せずに表示してしまう(リアルモード)です。これを取っているゲームがあるとは・・・。この動作しかないときはどうにかしてフルスクリーン「もどき」になるように設定を変えなければなりませんが、その設定には四苦八苦しました。何のゲームかは教えることができませんが、ヒントは以下の通りです。このblogを書いてる私のディスプレイのアスペクト比は16:9です。対象のゲームのアスペクト比はこのディスプレイのアスペクト比とは一致していません。4:3でもありません。このディスプレイでは[1280×720]の解像度での初期化ができないので(というか初期化できるものがなさそうな気が・・・)、無理矢理やろうとすると1600×900になります。ま、それは放置しておいて、COMとHRESULTです。前にもちょっと話しましたが、COMオブジェクトはすべてIUnknownというインターフェイスを継承しています。これが対象のオブジェクトの参照カウントを管理しているのでうまく使いましょう。COMオブジェクトはWindows特有のシステムで、以下のような形で使用します。CoInitialize(というかCoInitializeEx)でライブラリを初期化CoCreateInstanceで対象のオブジェクトを作成して初期化するオブジェクトは必要なくなればReleaseを使って解放するCoUninitializeでライブラリを開放するこれは別のページでも書いてあることなので適当に探してみてください。COMではHRESULTという変数型を使用します。この変数型はCOMでのエラーコード(または成功コード)を返すことでそのオブジェクトの動作が成功したかどうかを知らせます。WinAPI系がLRESULTなので、それと似たような感じです。以降、HRESULT型の変数はhrで記述します。Microsoftのサンプルコードもだいたいhrを使っています。これには付随するマクロがあります。指定した作業が失敗したかどうかこのマクロがあることからわかると思いますが、成功コードは一つではありません。成功してもいわゆる「問題があったけれどもその命令的には成功と見なせる」というコードがあります。成功コードと使われるのは以下の二つです。成功コードの先頭はすべてS_がついています。対象の処理は成功した。対象の処理を行う必要がなかった。//失敗したときの処理と記述すべきです。マクロの方がわかりやすいですが、私はほとんどの場合で何となく上の書き方を使っています。(説明書きで成功コードが複数存在し、そのすべてが成功と見なせる処理なら下で書きますが)汎用のエラーコードとしては以下のようなものがあります。これはDirectShowのフィルタを実装するときにも登場するコードです。エラーコードの先頭はすべてE_がついています。対象の機能が実装されていないDirectX系の場合は先頭のE_をDDERR_やD3DERR_に変えてエラーコードをとっているものもありますが、コードの制約は同じものを使っています。エラーコードの付け方としては参考になるので見てみるといいかもしれません。コメントをキャンセルメールアドレスが公開されることはありません。気になるプログラムネタや数学ネタがあったら書き込みたいのだが残業が長すぎて眠気が全くとれず体調があまりよくない。過労などでぶっ倒れるかもしれない。あと、さすがに独り身が寂しいのでなんとかしたいと考えてはいるのだが...。アクセスカウンタアクセス数:スポンサーリンクモバイルバージョンに。