![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.4ベストアンサー
- 回答日時:
> ここでまた疑問なんですがライブラリ(複数の関数)も
> API(1つの関数)も同じ関数ならAPIを入れなくても
> 直接アプリケーションとライブラリでできないんでしょうか。
ん?
APIは一つの関数とは限らないです。複数の関数を総称してAPIってこともあります。
ただの関数でも、アプリとのインターフェイスになるものはAPI(の一部)ですし、
インターフェイスの役をしない関数もあります。
関数そのものをAPIと呼ぶことも多いですが、必ずしも一致しません。
APIを実装(実現)する代表格が関数であって、関数=APIでもAPI=関数でもないです。
> 直接アプリケーションとライブラリでできないんでしょうか。
何ができないのかよく分かりませんが、APIってのは本質的には「取り決め」なので、
これがちゃんとしてないと、別の担当者になったときに困ったりします。
郵便局員の担当が「いつもの人」で互いに意思疎通できてれば多少のことはケアしてくれますけど、
別の担当になったとたんに話が通じなくなったり。(Interfaceが定まってない)
これが、応対マニュアルとか、申込用紙とか完備してきちんと取り決めがされていると、
別の担当者でも同じ手順で応対してもらえます。(Interfaceが定まっている)
APIってのは、「アプリケーションがこういうお願いをしたら、私はこういう応答をします」っていうお約束と、
それを実際にやってくれる担当者のことであって、関数は行員、ライブラリは郵便局。
APIがある利点というのは、利用者(アプリ)が郵便局内のごたごたとか業務フローを気にせずに、
窓口で決まった手順でお願いするだけで、誰が担当でもきちんと書留を送って貰える。
こういう、決まった手順をコミットして、何かをお願いすれば望む結果が返ってくると期待できるというところにあります。
これがばらばらだと、利用者が郵便局の支店ごとに別の手順を覚えるとか、窓口の担当者ごとに手順を確認するなどが必要になったりするのです。
APIで、どうゆう質問をすればどうゆう答えが返ってくることがわかるので
その先のライブラリの内容を気にしなくていいということですね。
>> 直接アプリケーションとライブラリでできないんでしょうか。
>何ができないのかよく分かりませんが、APIってのは本質的には「取り決め」なので、
>これがちゃんとしてないと、別の担当者になったときに困ったりします。
これはライブラリの内容がわかっていれば、どうゆう質問をすればどうゆう答えが返ってくるかわかると思ったので。
ご丁寧に教えてもらってありがとうございました。
No.3
- 回答日時:
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のほうが良いかと思います
No.2
- 回答日時:
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を入れなくても直接アプリケーションとライブラリでできないんでしょうか。
初歩的な質問ですいません。
No.1
- 回答日時:
APIとは、Application Program Interfaceの略です。
OSやDBなどのミドルウェア、CADなどのソフトウェアの機能を使用するための関数です。
ライブラリとは、そのAPIをまとめてあるバイナリファイルを言います
APIを使用するにはライブラリをリンクする必要があり、リンク方法には、ダイナミック・リンクとスタティック・リンクの2つの方法があります
DLLとは、そのダイナミック・リンクを行えるライブラリファイルのことです
ダイナミック・リンクの特徴は、プログラムが必要としているとき、メモリー上に読み込むことにあります。
その結果、プログラム本体のサイズが小さくなったり、ライブラリをファイル単位で共有することが出来ます
一方、スタティック・リンクの特徴は、プログラム本体とライブラリをリンクするため、APIの呼び出しが比較的に早いことです
ただし、ライブラリを共有して使用したいときなどは、リンクを行う必要があります。
この回答への補足
お答えありがとうございます。
ライブラリは複数のAPI
DLLは動的にメモリ確保できるライブラリ
ということですよね?
>ただし、ライブラリを共有して使用したいときなどは、リンクを行う必要があります。
ライブラリをリンクするためにはDLLとSLLどちらでもいいんですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) ラズパイ上の、pythonのエラーについて 1 2023/04/12 23:27
- 写真・ビデオ iPhoneのプライバシーとセキュリティの写真の項目について 2 2023/06/24 23:11
- iPhone(アイフォーン) iPhoneのプライバシーとセキュリティの写真の項目について 1 2023/06/24 20:25
- iPhone(アイフォーン) 「ライブラリ」ってどこの事ですか? ※ 英語の勉強のために Amazon で買物をしたいのですが、「 2 2023/07/14 22:04
- その他(プログラミング・Web制作) Pythonのライブラリをダウンロード済みかどうか簡単にチェックできますか? 3 2023/06/24 10:48
- その他(プログラミング・Web制作) Pythonのライブラリ、randomについて 3 2022/09/20 14:30
- iCloud 【iTunes】CDをiPhoneに取り込めません 2 2022/09/19 09:59
- その他(スマートフォン・携帯電話・VR) ページを削除するときに写真にある、「Appライブラリから使用できます」のやり方が分からないので教えて 1 2023/01/17 20:47
- 音楽・動画 AppleMusicについてです! サブスクに加入しています! 曲を「ライブラリに追加」を押してライ 1 2022/08/19 13:50
- ノートパソコン パソコンのiTunesライブラリにエクスプローラーにある曲を引っ張って来てリンクさせたいのですが、エ 1 2023/04/06 07:49
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語階乗の総和を求める
-
Python、プログラミングについ...
-
c++でテンプレートのコードでわ...
-
gccを行ってもexeファイルが生...
-
c言語
-
プログラム内から、MIDIファイ...
-
win10で、正確な待ち時間の作り方
-
応用情報技術者試験の令和元年...
-
大量のデータを読み込んで表示...
-
右ビットシフト
-
C言語 配列と関数の練習問題
-
gcc13.2のバグ?
-
C言語 入力した値から0までの数...
-
C言語 コマンドプロンプトにつ...
-
プログラミングの課題がわから...
-
なんで
-
バッチファイルで以下のような...
-
インクリメント演算子のみを用...
-
プログラミングについて。 1つ...
-
double型が正常に認識されてい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UNIX上のプログラムで使うライ...
-
拡張子.niiのファイルの開き方...
-
MakefileのLDLIBSとLOADLIBESの...
-
DXライブラリの画像の表示の仕...
-
.NET(C#)でのスタックオーバー...
-
windows media playerでdropbox...
-
【C#】PDFの作成や編集について
-
Excel VBA のstr()関数でエラー
-
Googlemapのように画像を拡大・...
-
PDFファイルの文字を取得するプ...
-
FPGAで立ち下がりエッジ動作FF
-
ファイルの圧縮/解凍(Zlib)に...
-
C言語 画像処理 jpeg → pgm
-
DXRubyのインストールの仕方を...
-
Unsatisfied code symbol エラ...
-
Excel 参照設定ActiveDirectory
-
pthreadのソースの入手方法
-
自作ライブラリの作成方法
-
コンパイル時のエラー
-
ライブラリ内の処理中における...
おすすめ情報