SDK

 

 SDK は、"Software Development Kit" の略です。固有名詞だかなんだかがわかりにくいのが面倒なところです。日本語では「ソフト開発キット」。「なんとか社ソフト開発キット」 といえば固有名になる、そういったところです。なんらかの「ソフト開発」のための「キット」 であるかぎり、 ネーミングに SDK を使うのは自由だというわけです。逆に、つけざるを得ないことでもあります。たいてい、ソフト開発でつかう、ソースコードやライブラリなどの「部品」がセットになってまとまったものです。

 Java SDK などもありますが、マイクロソフトが提供する SDK といったら Platform SDK のことです。Platform SDK のサイトを訪れると、このサイト自体の名前が Platform SDK だと思えるのは私だけかもしれませんが、提供するキットのことも Microsoft Platform SDK と呼んでいます。さらに SDK に分類がなされて名前がついています。

 略語で同じようにめんどうなのは、"API" に関しても同じです。Windows API だけでなく、Mac にだって "API" があります。SDK は日本語で普通に「ソフト(S)開発(D)キット(K)」。一方、API は、なんと日本語にはありません。API は、オペレーティングシステム上の「概念」です(仕組み)。これから API を使うというときに「概念」などといってしまうのもなんですが、具体的には「使う」ものです。なんだか固有名詞に見えてしまうこの妙な感じは、略語を使う「英語」ならではです。つまりはネーミング だということです。

 SDK (正式には Platform SDK)は、マイクロソフトの Platform SDK (サイト)で、これをダウンロードすることができます。中身は、開発者(Software Developer)のためのツール(toolKit)などです。膨大なファイルをかなり時間をかけてダウンロードしたあと、インストールされて、ディレクトリが展開されます。展開されたあとの主なディレクトリをあげるなら、bin, include, lib, src などが挙げられます。コンパイラを使用する者にとってはおなじみのディレクトリです。C:\Program Files\Microsoft SDK というディレクトリが作成され、そこに展開されます。このディレクトリ名を忘れると、実はあとで思い出すのがなかなか面倒だったりします。( C:\Program Files\mssdk の場合があります。)

 一種の「開発環境」には違いありませんが、「(ソフト)統合開発環境 : IDE」 と呼ばれるものとは違います。SDK は、便利に統合されたアプリケーション、ではなく、必要な (ときに便利な) 部品、です。

 


 

 この「キット」には、上に挙げたように、コンパイラに付属しているような、C/C++, Windows API 用の ヘッダファイル(include ; .h ファイル )スタティックライブラリ( lib ; .lib ファイル)、更には、ソースファイル( src ; .cpp ファイル等 ) までも入っています。マイクロソフト製以外の各コンパイラにも、ヘッダやスタティックライブラリが付属していますが、Windows API に関するファイルたちについては、この SDK に入っているものが正式なものであるということができます。

 

  ところがまず、ヘッダファイルに関しては、コンパイラは普通、各コンパイラに付属するヘッダファイルを使うようにできていて、それを使っていれば十分です。また、同質でもそれ以外のヘッダファイルを使ったプログラムが、正常にコンパイルされるかは、基本的には保障されるものではありません。だから、使用しているコンパイラを補う意味でなければ、 SDK のヘッダファイルは使いません。

  また、スタティックライブラリに関しては、各社のコンパイラで、中間オブジェクトのためのフォーマット(形式)が異なり、マイクロソフトのコンパイラ cl.exe が COFF フォーマット仕様のところ、OMF フォーマット仕様の他のコンパイラが存在(borland, Digital Mars など)するので、つまり、この SDK に入っているライブラリは、それらOMF仕様 のコンパイラではそのまま使用できません




 上記に関して、OMF 仕様のコンパイラで使用するには、  COFF から OMF に変換できれば可能で、変換の方法は、どうやらあるかのように見えます。borland 、Digital Mars 各社、 COFF2OMF ( .exe , 同名だが別物) というツールを開発していて、これがその変換ツールなのですが、borland 社のもの(フリーコンパイラに付属)は インポートライブラリしか変換できません。また、Digital Mars のものは有料で、性能はいいということらしいのですが、これを利用した例を見たことがないので coff から omf の変換が完全なのか(全て変換できるのか)についてコメントできません。(また、Digital Mars のものは、古い COFF フォーマットにしか対応していない(※)という情報もあります。こうなるとあまり使い物になるとは言いづらくなります)。  つまるところ、coff から omf の安定した変換方法は確立していない というのが現状のようです(2004/12)。つまり、できないこともないが現実的ではありません。また、マイクロソフト COFF フォーマットには、新、旧両形式がある(昔の COFF フォーマットが進化あるいは変更された)ようなので、ことはさらに複雑になっているようです。とはいえ、これらは非常に コア な話で、各社のコンパイラをデフォルトでそのまま使っていても、非常に広範なWindows Programming が可能であることには変わりがない ことも言っておきます。   ※ 新→旧の変換については、これもマイクロソフト社の lib.exe または link.exe を使うなどするようです。過去、フリーで入手できたようですが、現在では VC ++ を購入しなければ、入手できないようです。

 

  問題は Direct X にもおよび、Direct X SDK を入手しても、OMF フォーマットに変換できなければ borland や Digital Mars のコンパイラでは使えません。つまり上述のような困難があり、できたためしは見たことがありません。その点に関しては、Watcom は COFF と OMF の両方に対応しているということなので問題ないようです。Direct X に関しては
こちら でも小さい文字で少しだけ説明してあります。

 

少し悲しい感じになってしまいましたが、数学を修めた人だったら関数を作ってしまえばこの壁は乗り越えられる言っておきましょう。ただ、マイクロソフトはゲームプログラマーが好きらしいのです。仮にも、仮にでも、Direct X の壁がマイクロソフトの挑戦状だとしたら、そんな挑発にのるのもばかばかしい、と個人的には思いました・・・。

 

以上のことがあるので、膨大な SDK をダウンロードしても、結局徒労だったのか、と感じる場合も多いと思います。

 


話がすこしそれましたが、SDK の話でした。SDK の src には、c標準関数のランタイム用のソース (crt) なども含まれており、これを見れば c標準関数がc言語のソースで書かれているので、少しは参考になるでしょう。また、SDK には他にも、ATL のヘッダやソース、MFC 関係(これは実際使えるものなのかはまだよくわかりません)が付属しています。ATL 関係については、これは COM のプログラムを書くときに、参考にしたり、もしくは実際に使えるものなので、少なくともその点だけにおいては SDK をダウンロードする価値がある、といっておきます。OLEViewer というちょっとしたツールもあります (bin ディレクトリ)

初心者うんぬんの話ではなくて、ライブラリのフォーマット(COFF と OMF の違い)の関係から、Watcom 使用以外では、ソースコードやヘッダファイルを自分で見て参考にする目的以外には、ぱっとした使い勝手がありません。しかし、それと矛盾ではありますが、興味があるならば、手に入れるだけ手に入れてしまう、ことも同時にお勧めします。Direct X sdk しかりです。


STLATL との混同に注意してください。
※ SDK をインストールしたからといってパソコンの設定等が大きくかわってしまうようなことはありません。

 

始めに