dポイントプレゼントキャンペーン実施中!

はじめまして。
すごく初歩的な質問ですが
誰かライブラリとAPIの違いを教えてください。
どちらもプログラムでよく使うものをまとめたものみたいですが両者の違いが分かりません。
またDLLはライブラリの一部なんでしょうか?

A 回答 (4件)

> ここでまた疑問なんですがライブラリ(複数の関数)も


> API(1つの関数)も同じ関数ならAPIを入れなくても
> 直接アプリケーションとライブラリでできないんでしょうか。

ん?
APIは一つの関数とは限らないです。複数の関数を総称してAPIってこともあります。

ただの関数でも、アプリとのインターフェイスになるものはAPI(の一部)ですし、
インターフェイスの役をしない関数もあります。

関数そのものをAPIと呼ぶことも多いですが、必ずしも一致しません。
APIを実装(実現)する代表格が関数であって、関数=APIでもAPI=関数でもないです。

> 直接アプリケーションとライブラリでできないんでしょうか。

何ができないのかよく分かりませんが、APIってのは本質的には「取り決め」なので、
これがちゃんとしてないと、別の担当者になったときに困ったりします。

郵便局員の担当が「いつもの人」で互いに意思疎通できてれば多少のことはケアしてくれますけど、
別の担当になったとたんに話が通じなくなったり。(Interfaceが定まってない)
これが、応対マニュアルとか、申込用紙とか完備してきちんと取り決めがされていると、
別の担当者でも同じ手順で応対してもらえます。(Interfaceが定まっている)

APIってのは、「アプリケーションがこういうお願いをしたら、私はこういう応答をします」っていうお約束と、
それを実際にやってくれる担当者のことであって、関数は行員、ライブラリは郵便局。

APIがある利点というのは、利用者(アプリ)が郵便局内のごたごたとか業務フローを気にせずに、
窓口で決まった手順でお願いするだけで、誰が担当でもきちんと書留を送って貰える。
こういう、決まった手順をコミットして、何かをお願いすれば望む結果が返ってくると期待できるというところにあります。
これがばらばらだと、利用者が郵便局の支店ごとに別の手順を覚えるとか、窓口の担当者ごとに手順を確認するなどが必要になったりするのです。
    • good
    • 2
この回答へのお礼

APIで、どうゆう質問をすればどうゆう答えが返ってくることがわかるので
その先のライブラリの内容を気にしなくていいということですね。

>> 直接アプリケーションとライブラリでできないんでしょうか。
>何ができないのかよく分かりませんが、APIってのは本質的には「取り決め」なので、
>これがちゃんとしてないと、別の担当者になったときに困ったりします。

これはライブラリの内容がわかっていれば、どうゆう質問をすればどうゆう答えが返ってくるかわかると思ったので。

ご丁寧に教えてもらってありがとうございました。

お礼日時:2007/02/05 23:52

ANo.1です。


言葉足らずで、すみません

>ライブラリは複数のAPI
例えば、WindowsのメッセージBOXを表示したい場合、一から作ることは無いと思います。メッセージBOXを表示する場合は、あらかじめ、OSに準備してある関数を呼び出して、表示させます。
このOSなどソフトに機能を使用するに当たって、呼び出す関数等をAPIと呼びます。

ライブラリはAPIが登録されているファイルです。

>DLLは動的にメモリ確保できるライブラリ
メモリ確保できるライブラリでは、ありません

プログラムがAPIを使用するとき、APIが登録してあるファイル(=ライブラリ)を呼び出される都度、参照するのがDLLです
仮にDLLが無くても、プログラムがDLLに登録されているAPIを呼び出さない限り、実行できるのは、このためです。

一方、SLLは、プログラムが実行することさえ出来ません。

>ライブラリをリンクするためにはDLLとSLLどちらでもいいんですか?
どちらが良いかは、ケースバイケースです

DLLでは、不具合の修正を行ったばあい、不具合の発生したDLLのみを入れ替えることで修正することが出来ます。
その他にも、メニューなどに、導入してあるソフトウェアによって挙動を変える場合は、DLLを使用します。
ただし、DLLを作成するには少々難しくなります。

一方SLLは、作成するには、簡単ですが、DLLのようにファイルを入れ替えということはできません。
不具合を修正しても、全てリンクしなおす必要があります

APIを提供しているソフトウェアのほとんどは、DLLで提供していると思います。
一方、個人レベルで関数などを共有して使用したいときは、SLLのほうが良いかと思います
    • good
    • 0

Application Programming Interfaceの意味するところは、


アプリケーションをプログラミングするためのインターフェイス(イメージは窓口の利用方法)です。
「1番がインフォメーションカウンタ、2番は普通預金、3番は普通郵便、…」
みたいなものの、プログラム版と思ってもらえば分かりやすいかと。
「1を使うとファイルオープン、2を使うとクローズ、…」
窓口に出す伝票相当が、関数でいえば引数(パラメータ)とかで、
受け取るものが戻り値などです。

API自体はこういったお願いをするための手順や、
その結果の報告方法(郵送?口頭?)なども含めた一連をルールを含めての「決め事」をさすので、
関数呼出が一般的ですがそれに限った話ではないです。


で、ライブラリというのは関数の詰め物です。
他人が作ったライブラリ等は、呼び出しに決め事があるのが普通で、
これがそのライブラリを使うためのAPIになります。

> ライブラリは複数のAPI

より粒度の狭い、各関数単位でAPIを見れば、ライブラリは複数のAPIを含むともいえますが、
一連の機能群を持ったライブラリであれば、全体としてAPIの実装を提供していると取るべきかと思います。
# APIが窓口なら、ライブラリ(郵便局?)の中には関数(受付やその他の局員)が詰まってます。
# 利用者が一般的な利用手順に沿って郵便局を利用するように、
# プログラマはAPIに沿ってそのライブラリを使います。

> DLLは動的にメモリ確保できるライブラリ

「メモリ確保」だと語弊があるかもしれません。
実行時にリンクできるのがDLLで、ビルド時にリンクしてしまうのがSLLです。
「(コードに限らない)動的なメモリ確保」だけであればどちらでも可能です。

> ライブラリをリンクするためにはDLLとSLLどちらでもいいんですか?

DLLもSLLもどちらもライブラリの一種であり、どちらもリンクして使います。
但し、リンクのタイミングがビルドの時に予めやってしまうか、実行時にやるか、の違いがあります。
(実行時にやると、その場で取り替えるとかができる反面、管理が多少煩雑になります)

この回答への補足

ありがとうございます。

すごい分かりやすい例えです。

ライブラリ(郵便局)を利用するためにインターフェース(窓口)が必要なんですね。

ここでまた疑問なんですがライブラリ(複数の関数)もAPI(1つの関数)も同じ関数ならAPIを入れなくても直接アプリケーションとライブラリでできないんでしょうか。

初歩的な質問ですいません。

補足日時:2007/02/05 21:55
    • good
    • 0

APIとは、Application Program Interfaceの略です。


OSやDBなどのミドルウェア、CADなどのソフトウェアの機能を使用するための関数です。
ライブラリとは、そのAPIをまとめてあるバイナリファイルを言います

APIを使用するにはライブラリをリンクする必要があり、リンク方法には、ダイナミック・リンクとスタティック・リンクの2つの方法があります

DLLとは、そのダイナミック・リンクを行えるライブラリファイルのことです
ダイナミック・リンクの特徴は、プログラムが必要としているとき、メモリー上に読み込むことにあります。
その結果、プログラム本体のサイズが小さくなったり、ライブラリをファイル単位で共有することが出来ます

一方、スタティック・リンクの特徴は、プログラム本体とライブラリをリンクするため、APIの呼び出しが比較的に早いことです
ただし、ライブラリを共有して使用したいときなどは、リンクを行う必要があります。

この回答への補足

お答えありがとうございます。
ライブラリは複数のAPI
DLLは動的にメモリ確保できるライブラリ
ということですよね?

>ただし、ライブラリを共有して使用したいときなどは、リンクを行う必要があります。
ライブラリをリンクするためにはDLLとSLLどちらでもいいんですか?

補足日時:2007/02/05 08:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!