ContentsC++ Labo.>4-1:OggVOrbisをC++Builderで使用する(準備編)


C++Builder研究所

【4-1:OggVOrbisをC++Builderで使用する(準備編)】


戻る⊂(・ω・⊂) (つ・ω・)つ次へ

【1:SDKのダウンロード】
何をするにも、まずは開発キットが必要です。
コレがないと話になりません。

OggVorbisのオフィシャルサイトより
[Download Official vorbis stuff]→[Windows]の[Source Code/Development Tools]項目より
以下のモノをダウンロードして下さい。

○必須
・Ogg Vorbis Win32 SDK

○用途に応じてダウンロード
・libogg source
・libvorbis source

なお、上記のOgg Vorbis Win32 SDKは、VisulaC++環境が前提として構築されています。
配布されているDLLやLIBファイルは、VisualC++でビルドされています。
この為、DLLをC++Builderで使用する場合には少し制限事項が出てきます。
これを回避したい(VisualC++と同じように使いたい)場合は、libogg sourceとlibvorbis sourceも
ダウンロードしておいて下さい。

【2:SDKを解凍する】
ダウンロードしたファイルはZIP形式で保存されているので、Lhasa/+Lhaca等の解凍ツールを使って解凍して下さい。

<OggVorbis Win32 SDKを解凍する>
Ogg Vorbis Win32 SDKは、ファイルを解凍すればOKです。
[Ogg Vorbis Win32 SDK]
 ├[bin] … DLLファイルが格納されています。
 ├[doc] … OggVorbisのAPIの使い方などのドキュメントが格納されています。
 ├[examples] … OggVorbisを利用する場合のサンプルソースが格納されています。
 ├[include] … OggVorbisを利用するためのインクルードファイルが格納されています。
 └[lib] … OggVorbisを静的・動的リンクするためのライブラリファイルが格納されています。

ちなみに、.libと.dllファイル名の語尾に_dがある場合はデバッグ用。
_staticとある場合は、静的リンク用です。

<OggVOrbisソースをマージする>
libogg sourceとlibvorbis sourceを、解凍した後でマージする必要があります。
(実際の所、マージすると問題があるのですが、Win32環境上には影響はありません。)
それは、libvorbis内部でliboggのモジュールを必要とするからです。
パスを通すのもいいですが、こっちの方が手っ取り早いので。

【3:実際に使えるようにする】
<デフォルトで配布されているDLLを利用する場合>
一番お手軽な方法かと思います。
必要な箇所でLoadLibrary関数でDLLをロードし、不要になったらFreeLibrary関数でアンロードする。

しかし、ここで罠が待っています。
この方法でOggVorbisを使用される場合は、ov_open関数が使えません。
ov_open関数を使おうとすると、見事に例外が発生して落ちます。

理由は、VCとBCのコンパイラ間ではファイルポインタの構造が全く違うという事です。
一応、ov_open_callback関数を利用すれば回避は可能ですが、どうしてもov_open関数が使いたい場合は
BC++Builder環境でソースをリビルドする必要があります。

<OggVOrbisソースをリビルドする>
「外部にDLLを持ちたくない」と言う方もいらっしゃるでしょう。
そう言う方は、VC++を購入して下さい(ォィ

「M$製なんてイヤダ」とか「BC++Builderじゃなきゃ駄目なんだ」と言う天の邪鬼な方(当方含む)の為に、
BC++Builderでビルドする方法を記述します。

OggVorbisは、BSDライクなオープンソース形態を取っているため、ソースコードも公開されています。
(先ほど解凍した、libogg sourceとlibvoris sourceです。)
これをBC++Builderでビルドしてあげれば良いわけです。

しかし、ここで一つ問題点が出てきます。
SDKで配布されているプロジェクトはVC用であり、BC++Builder用ではない点です。
これは、BC++Builderに付属している<VCプロジェクト変換ユーティリティ>を使って変換すれば問題ありません。
変換対象は
動的リンクライブラリ作成静的リンクライブラリ作成
ogg_dynamic.dspogg_static.dsp
vorbis_dynamic.dspvorbis_static.dsp
vorbisenc_dynamic.dspvorbisenc_static.dsp
vorbisfile_dynamic.dspvorbisfile_static.dsp
です。 一つ注意すべき点は、VC++用プロジェクトにはデバッグ用とリテール用が別々に設定可能ですが、 BC++用プロジェクトではこれが出来ません。 両方とも同じファイル名で出力されてしまいます。 また、VCプロジェクト変換ユーティリティは、出力するプロジェクトファイルの名前を変更する事が出来ません。 気を付けて下さい。 何で別々に設定できるようにしないのかと、Borlandを小一時間問い(ry 後は、出来上がったプロジェクトをBC++Builderで開き、ビルドをするだけで各種ライブラリの完成です。 (大量に警告文が出てきますが、無視しても動きます。) 因みに、そのままvorbisenc_staticをビルドすると、以下の様なエラーが発生します。 [Tlib エラー]library too large,please restart with library page size 32 これは、ビルド後のライブラリが大きすぎて確保したページサイズに収まりませんというエラーです。 回避するには、[プロジェクト]→[オプション]の[TLib]タブの[ページサイズ]項目の値を 0x0010(16)→0x0020(32) に変更してあげて下さい。 戻る⊂(・ω・⊂) (つ・ω・)つ次へ

douglas@ax.powerzoo.net
PostPet: