QuickTime for Windows SDK はここからダウンロードできます(要 ADC = Apple Developer Connection 登録)。右の Downloads and Tools をクリックすると ADC のアカウントを聞かれ、その先にダウンロードリンクがあります。
リンクの説明文には、”All APIs in this SDK are deprecated and should not be used for new development.” と書いてあります。もっとも、Mac の方でも QuickTime X が出た時点(だいぶ前)で QuickTime 7 は deprecated のはずなので、これ自体は特に新しい情報ではありません。
zip を展開するとインストーラ exe が出てきてそれを実行すると C:\Program Files (x86)\QuickTime SDK にファイルが展開されます…が、スタートアップグループ項目どころか EULA や README すらありません。アンインストール項目はあるのに。Apple としてはいつものことのような気がしますが、この時点でだいぶやる気を削がれます。
ともあれ、試しに Ut Video Codec Suite の utv_qt 以下をコンパイルしてみるのですが、ヘッダファイル内でエラーが出ます。切り分けのために以下のようなソースファイルを作ります。
#include <Carbon.h>
ホントにこれだけ。エラーの起きようがありません。
これを Visual C++ 2005 SP1 でコンパイルすると…
E:\vsproj\utvideo\utv_qt>cl /I"C:\Program Files (x86)\QuickTime SDK\CIncludes" a.c Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. a.c C:\Program Files (x86)\QuickTime SDK\CIncludes\ConditionalMacros.h(1662) : warning C4005: 'TARGET_API_MAC_CARBON' : マクロが再定義されました。 C:\Program Files (x86)\QuickTime SDK\CIncludes\CoreServices.h(25) : 'TARGET_API_MAC_CARBON' の前の定義を確認してください C:\Program Files (x86)\QuickTime SDK\CIncludes\ATSUnicode.h(145) : error C2365: 'kATSULineWidthTag' : 再定義; 以前の定義は '列挙子' でした。 C:\Program Files (x86)\QuickTime SDK\CIncludes\ATSUnicode.h(145) : 'kATSULineWidthTag' の宣言を確認してください。 C:\Program Files (x86)\QuickTime SDK\CIncludes\ATSUnicode.h(145) : error C2086: 'kATSULineWidthTag' : 再定義されました。 C:\Program Files (x86)\QuickTime SDK\CIncludes\ATSUnicode.h(145) : 'kATSULineWidthTag' の宣言を確認してください。 C:\Program Files (x86)\QuickTime SDK\CIncludes\ATSUnicode.h(147) : error C2365: 'kATSULineRotationTag' : 再定義; 以前の定義は '列挙子' でした。 C:\Program Files (x86)\QuickTime SDK\CIncludes\ATSUnicode.h(147) : 'kATSULineRotationTag' の宣言を確認してください。 C:\Program Files (x86)\QuickTime SDK\CIncludes\ATSUnicode.h(147) : error C2086: 'kATSULineRotationTag' : 再定義されました。 C:\Program Files (x86)\QuickTime SDK\CIncludes\ATSUnicode.h(147) : 'kATSULineRotationTag' の宣言を確認してください。 (略) C:\Program Files (x86)\QuickTime SDK\CIncludes\ATSUnicode.h(249) : fatal error C1003: プログラム内のエラーが 100 個を超えました。コンパイルは中断されます。
(゜Д゜)ハァ?
ちなみに、a.c を
#define TARGET_API_MAC_CARBON 0 #include <Carbon.h>
にすると TARGET_API_MAC_CARBON が再定義云々とは言われないし、ConditionalMacros.h の 1037 行目を
#define PRAGMA_ONCE 1
にすると列挙子云々とは言われなくなりますが、今度は全く別のエラーが出ます。万事この調子。
これではやる気以前の問題です。論外。
きわめて奇妙なことに、これの対策方法をググっても見つかり(見つけられ)ません。というか、同じ問題にハマってる人が見つかりません。こういう場合、もちろん問題はこちら側にあると考えるのが妥当ですが、ググっても見つからないのではどうにもなりません。
QuickTime for Windows コンポーネントの書き方
以前、SDK バグってんじゃねーの、と書きましたが。 オープンソースで QuickTime for Windows にも対応しているコンポーネントのソース(たとえば XiphQT)を読むと、どうやら <Carbon.h> や <Qu…