随意是什么意思| 准生证需要什么材料| 嗓子哑吃什么药| 牵引车是什么车| 长期吃阿司匹林有什么副作用| 宫颈息肉不切除有什么危害| 脉数是什么意思| 火气太旺是什么原因| 钢铁侠叫什么名字| dr胸部正位片是检查什么的| 孕妇能喝什么茶| 榴莲为什么苦| 引产是什么意思| 小孩子头晕是什么原因| 什么草药能治肿瘤| 检查梅毒挂什么科| cpi是什么| 轮状病毒吃什么药| 拜谢是什么意思| 攻读学位填什么| 幽门螺杆菌阳性是什么意思| 滴蜡是什么意思| 口是什么感觉| 阴阳两虚吃什么| 嗓子疼是什么原因引起的| 才美不外见的见是什么意思| 头皮屑是什么| 尿频尿急吃什么药| 孕妇便秘吃什么最快排便| 远香近臭什么意思| 有志什么成| 男神是什么意思| 天贝是什么东西| 300年前是什么朝代| 搬迁送什么礼物好| 收敛是什么意思| 散光看东西是什么样的| 嗓子中间的那块小肉叫什么| 80年属什么的| 民政局是干什么的| 支原体感染用什么药| 射手属于什么象星座| 素女是什么意思| 有氧运动和无氧运动有什么区别| 中筋面粉适合做什么| 人皇是什么意思| 全麦面包是什么意思| 肥皂剧是什么意思| 扁桃体挂什么科| 胎儿右侧脉络丛囊肿是什么意思| 干预治疗是什么意思| 什么是前列腺| 经期量少吃什么来排血| 海蜇是什么| 眼屎多用什么眼药水| 白细胞偏低是什么原因造成的| 贵姓是什么意思| 牙齿吃甜的就会疼什么原因| 血压低有什么危害| 瑶字五行属什么| 缺心眼是什么意思| 北京什么时候最热| 广州有什么山| 8月26日是什么星座| 1960年属鼠的是什么命| 心肌缺血吃什么| 改户口需要什么手续| 什么是脱敏| mac版本是什么意思| 什么是免疫力| 为什么人不会飞| 天下乌鸦一般黑是什么生肖| 手麻吃什么药效果好| 耳塞戴久了有什么危害| 诞辰什么意思| 过敏性咳嗽有什么症状| bpo是什么意思啊| 91年的羊是什么命| 抽烟手抖是什么原因| 为什么会有霉菌性阴道炎| 拉屎不成形是什么原因| 麻薯是什么| 小人痣代表什么意思| 月经不调有什么危害| 女人代谢慢吃什么效果最快| 布帛是什么意思| 日落胭脂红的下一句是什么| 蚊子为什么不咬我| 贡菜是什么菜做的| 梦见爆炸是什么意思| 做美甲师容易得什么病| 龙骨为什么比排骨便宜| 儿童乘坐飞机需要什么证件| 10.30是什么星座| 什么方法可以降血压| 左下腹疼痛是什么原因女性| 左脸长痘是什么原因| 欺世盗名是什么意思| 精索静脉曲张什么症状| 木糖醇是什么东西| 热血病是什么病| 细菌性前列腺炎吃什么药| 码子是什么意思| 失眠是什么原因引起的| 梦见野猪是什么预兆| 什么病不能吃虾| 国企混改是什么意思| 上寒下热体质吃什么中成药| 7.6是什么星座| 痛风什么引起的原因有哪些| 什么叫一桌餐| 什么血型的人最聪明| 舌头两边锯齿状是什么原因| 趋势是什么意思| 牙碜是什么意思| 喝什么降火| 噩梦是什么意思| 什么水果含维生素c最多| mi什么意思| 存是什么生肖| 本能反应是什么意思| 半月板是什么部位| 云州是现在的什么地方| ab型和a型生的孩子是什么血型| 什么水果消炎| 皂苷是什么| b族维生素什么人不能吃| 左克是什么药| 私奔什么意思| 血液循环不好吃什么药| 睡觉腿麻是什么原因引起| 黑鱼不能和什么一起吃| 乙肝表面抗原高是什么意思| 尼古丁是什么东西| 电灯是什么时候发明的| 长疮是什么原因| 一什么亮光| 文笔是什么意思| 什么坚果适合减肥吃| 摘胆对身体有什么影响| 什么情况需要根管治疗| 画地为牢是什么意思| 男人喜欢什么罩杯| 各什么各什么| 色斑是什么原因引起的| 枸杞与菊花一起泡水喝有什么功效| 潭柘寺求什么最灵验| 猫咪泪痕重是什么原因| 什么情况下会流前列腺液| 脊髓空洞是什么意思| 雷锋原名叫什么| 下面干涩是什么原因导致的| 氯雷他定什么时候吃| 什么是卵巢囊肿| 单男是什么意思| 低钠盐是什么意思| 妈妈生日送什么| 梅毒通过什么途径传染| 皮脂膜是什么| 大便有粘液是什么原因| 2013年是什么命| 面粉是什么做的| 点到为止是什么意思| 青少年手抖是什么原因| 补票是什么意思| 鼻窦炎是什么样子的| 什么是邮箱地址| 支原体弱阳性是什么意思| 药流前需要做什么检查| 瓜子脸剪什么发型好看| 卢靖姗是什么混血| 一个至一个秦是什么字| 非球面镜片是什么意思| 维吾尔族是什么人种| 冲锋什么| 男的纹般若有什么寓意| 蝴蝶吃什么食物| 创客是什么意思| 格林巴利综合症是什么| 什么是玫瑰糠疹| 空调滴水是什么原因| 什么是呼吸性碱中毒| 上面一个处下面一个日是什么字| 百香果什么时候种| 西洋参吃了有什么好处| 辅警是什么编制| 发烧吃什么药退烧快| 表虚不固是什么意思| 安宫牛黄丸治什么病| 来大姨妈为什么会拉肚子| 一等功有什么待遇| 反流性食管炎是什么病| 经常吐是什么原因| 宫腔内无回声区是什么意思| 喉咙发炎不能吃什么食物| 高反吃什么药| 6月底什么星座| 什么姓氏排第一| swell是什么牌子| 糖类抗原125偏高说明什么| 什么是色拉油| 免冠是什么意思| 氧化亚铜什么颜色| 竖心旁的字和什么有关| 黄茶属于什么茶| 近视吃什么改善视力| 松香对人体有什么危害| 紫砂壶什么泥料最好| 母女丼什么意思| 为什么奢侈品都是pvc| 85年属什么| 开塞露用多了有什么副作用| 梦见好多死人是什么征兆| 三问表是什么意思| 什么人不能吃绿豆| 丙氨酸氨基转移酶高是什么原因| 六块钱麻辣烫什么意思| 鸟牌是什么牌子的衣服| 头上爱出汗是什么原因| 覆盆子有什么作用| 厦门为什么叫厦门| 抵抗力差吃什么可以增强抵抗力| 脾大是什么原因| 肌酐是什么指标| 辣木籽是什么| 什么天什么什么| 早孕试纸什么时候测最准确| 化疗后骨髓抑制是什么意思| 三手烟是什么意思| 大什么什么什么成语| 喉咙有白点是什么原因| 小便发黄什么原因| 什么是八爪鱼| 干事是什么意思| 尤加一笔是什么字| 可乐必妥是什么药| 夏天适合喝什么茶| 2007属什么生肖| 疝气吃什么药效果好| 什么牌子的冰箱好用又省电| 为所欲为什么意思| 孩子多动缺什么| 蒙脱石散适合什么腹泻| 额头爱出汗是什么原因| 身份证有x代表什么| 吃什么长肉| 不悔梦归处只恨太匆匆是什么意思| 宝宝吐奶是什么原因| 4.11是什么星座| 丢钱是什么预兆| 小便不舒服吃什么药| 去医院看头发挂什么科| 竹叶青属于什么茶| 落花生为什么叫落花生| 男性硬下疳是什么样子| 什么是居间费| 边鱼是什么鱼| 弱阳性和阳性有什么区别| 冠脉ct和冠脉造影有什么区别| 巨蟹男喜欢什么样的女生| 肝纤维化是什么意思| myp是什么意思| 回族不能吃什么肉| 碧玺是什么| 百度コンテンツにスキップ

中国科协创新驱动助力工程专家对接活动在苏...

出典: フリー百科事典『ウィキペディア(Wikipedia)』
百度 这是《南风窗》的至诚之心,是《南风窗》的思考和行动。

Windows APIウィンドウズ エーピーアイ)とは、Microsoft WindowsシステムコールAPIのこと。特に32ビットプロセッサで動作するWindows 95以降やWindows NTで利用できるものはWin32 APIと呼ばれる。また、それらのWindowsにおけるWin32 APIの実装をWin32と呼ぶ。

64ビットプロセッサ向けのWin64 APIも含める場合は「Windows API」という包括的な名称が正確だが、慣習的にWin32と言えばWin64も含んでいることがある[1]

概要

[編集]

Windowsオペレーティングシステム (OS) 上で動作するアプリケーションにとって、Windows APIはWindowsの各機能にアクセスするための接点である。そのため、Windows上で動作するアプリケーションを作成できる様々なプログラミング言語?開発環境においてWindows APIを使用する手段が提供されている。特にCC++向けには、Windows SDKにより、<windows.h>をはじめとする多数のヘッダーファイルが公開されている。Microsoft Visual C++のC/C++ランタイムライブラリのうち、OSの機能にアクセスするものは、内部的にWindows APIを用いて実装されている。また、多くの開発環境で、Windows APIを基にした、より高水準のフレームワークが構築されている。これらを通じて、すべてのWindowsアプリケーションは、直接的または間接的にWindows APIを使用している。

Windows APIに属する各APIは、主にDLLに実装されており、C言語形式関数またはCOMインターフェイスとして機能が公開されている。関数の呼出規約はWin32 (x86) の場合に原則としてstdcallを採用する[2][3]など、統一されたインターフェイスで多数のプログラミング言語からの使用を容易なものとしている。

分類

[編集]

Windows APIの中核となる機能はKernel、User、GDIに分けられる[4]。当初は、それぞれKERNEL.EXE (モードによってはKRNL286.EXE、KRNL386.EXE)、USER.EXE、GDI.EXEに実装されていた。32ビット化されて以降は、KERNEL32.DLL、USER32.DLL、GDI32.DLLに実装されている。Windows 7の新カーネル、MinWinでは、"Virtual DLL"の仕組みが導入され、インターフェイス互換性を維持したうえで実装の整理が行なわれている[5][6]

Kernel
ファイルシステムデバイスプロセススレッドレジストリ例外処理など基盤となる機能
User
ウィンドウの処理、ボタンやスクロールバーなどといった基本的なコントロール、マウス?キーボード入力、その他グラフィカルユーザーインターフェイス (GUI) に関わる機能。
GDI
ディスプレイ?プリンタをはじめとした出力装置への描画機能

現在では、これだけに留まらず、多数のDLLから無数の機能が公開されている。現在、マイクロソフトのドキュメントでは次のように分類している[7]

  • Administration and Management
  • Diagnostics
  • Graphics and Multimedia
  • Networking
  • Security
  • System Services
  • Windows User Interface

なお、この分類では、KernelはDiagnosticsとSystem ServicesそしてSecurityに跨って属し、UserはWindows User Interface、GDIはGraphics and Multimediaに属する。

グラフィックとマルチメディア

[編集]

DirectX

[編集]

マイクロソフトはWindows 95/Windows NT 4以降、全てのWindowsにDirectXを用意している。DirectXは主にゲームマルチメディアのためのAPIであるが、Windows Vista以降はDirectX GraphicsがGDIに代わってOSのグラフィックス描画の基盤として昇格されている。Windows OSのバージョンや、サービスパックあるいは機能更新プログラムの適用状況によって、利用可能なAPIやAPIのバージョンが異なる。DirectX APIのうちのいくつかは、ゲームコンソールであるXboxシリーズ(XboxXbox 360Xbox Oneなど)と共通になっている。大半はハードウェアとの通信を仲介するAPIであり、利用するにあたって、DirectX対応ハードウェアおよびデバイスドライバーのインストールが必要となるものも多い。

Direct3D
3Dグラフィックスアクセラレータの操作。当初はWindowsにおけるOpenGLの代替手段でもあったが、Direct3D 12はよりハードウェアに近いローレベルAPIとなり、競合はVulkanである。
DirectDraw
2Dグラフィックスアクセラレータの操作。DirectX 8.0以降、DirectDrawの機能はDirect3Dに吸収された。
DirectX Graphics
DirectX 8.0以降に導入された名称で、Direct3DおよびDirectDrawの統合を意味するものだったが[8]、DirectX 11以降はDXGI/Direct3D/Direct2D/DirectWrite/DirectCompositionの総称となっている[9]
DXGI (DirectX Graphics Infrastructure)
DirectX 10以降、DirectX Graphicsから比較的変化の緩やかな部分はDXGIとしてDirect3Dから分離された。
Direct2D
Direct3D上に構築された高レベル2D描画用API。GDI+の置き換えとなる。
DirectWrite
テキストおよびフォント/フォントグリフを扱う。
DirectCompute
DirectX 11で導入されたGPGPU用のAPIという位置付けだが、実際にはDirect3Dの一部。
DirectSound
低水準なハードウェア(主にサウンドカード)への操作。
DirectMusic英語版
DirectSoundの上位に位置し、音楽(メディアファイルの再生など)を扱う。
DirectX Audio
DirectX 8.0以降に導入された名称で、DirectSoundおよびDirectMusicの統合を意味するものだったが[8]、DirectX 9以降はX3DAudio/XAudio2/XACT/DirectSoundなどの総称となっている[10]
DirectInput
ジョイパッドやゲームパッドからの入力、およびフォースフィードバックを扱う。
XInput
Xbox 360Xbox OneのコントローラーをWindows上で使えるようにするAPI。
DirectPlay英語版
ネットワークなどを介した通信。
DirectShow
汎用的なマルチメディアパイプラインシステム。

DirectX APIはWindows APIの中でも変化が激しいAPIのひとつで、Direct3D RM、DirectDraw、DirectSound、DirectInput、DirectPlay、およびDirectMusicはWindows Vista以降完全な互換機能が用意されず、一部を除いて廃止あるいは代替APIに吸収されている[11][12]

静止画

[編集]

動画?音声

[編集]

OpenGL

[編集]
WGL英語版
OpenGLとWindows (GDI) との連携部分を担当するAPIである。各関数名は接頭辞wglで始まり、<wingdi.h>で宣言されている。なお、Windows SDKに付属するOpenGLヘッダーおよびライブラリにはOpenGL 1.1までの関数しか定義されておらず、したがってOpenGL 1.2以降の機能を使うためには、Khronosから最新のOpenGLヘッダーをダウンロードしたのち、WGLのwglGetProcAddress()関数を用いてハードウェアベンダーが提供するOpenGL ICD (Installable Client Driver) の関数エントリポイントをアプリケーション実行時に取得するなどの作業が必要となる[14]

ネットワーク?インターネット

[編集]

コンポーネント技術

[編集]

ネイティブAPI

[編集]

ネイティブAPIは、Windows NT系においてWindows APIより下位層のAPIである。NT系では、NTネイティブAPI上にサブシステムとしてWin32 APIが実装されている。ただし、DirectXやGDIなどは、ネイティブAPIを介さず、より下位に位置するカーネルと直接やり取りを行う。

.NET Frameworkとの関係

[編集]

Windowsで動作する.NET Frameworkは、基本的にWin32 APIを用いて実装されている。例えばWindows FormsおよびWindows Presentation Foundation (WPF) はそれぞれ内部的にGDI/GDI+あるいはDirect3Dを利用して構築されたGUIアプリケーションのフレームワークであり、Win32 APIとの相互運用性も確保されている。基本クラスライブラリも、OSの機能にアクセスするものはWindows APIを内部的に利用している。P/InvokeやCOM相互運用によって、.NETアプリケーションからWindows APIを利用することも可能である。

かつて、「Windows Vista以降、WinFXと呼ばれる新しいAPIがWindows APIに代わってネイティブAPIになる(WinFXが最も低水準なAPIとなりWindows APIはそのラッパーとなる)」とアナウンスされたことがあったが、結局撤回され、Windows Vista製品版では従来通りWindows APIがネイティブなAPIとなっている[16]。WinFXの計画は方針転換され、予定されていた機能は.NET Framework 3.0としてリリースされた[17]

実装

[編集]

Windows APIは名前からも類推できるとおり、主にMicrosoft Windowsに実装されている。その実装はWindowsのバージョン毎に少なからず違いが存在する。たとえばWin32の場合、Win32c、Win32sではごく一部を除きUnicodeに対応していない、セキュリティ対策のアクセス制限が実装されていないなどといった違いが挙げられる。そしてそれは大きく次のように分類することができる。

Win16

[編集]

Win16は、16ビットプログラム用の実装である。ただし、Win16という語自体はWin32が登場してから用いられるようになったレトロニムである[18]。Win16は大きく2種類に分けられる。

  • Windows 1.0からWindows 3.1までおよびWindows 95/98/Me(9x系)の実装。
  • WOW (Windows on Windows): Windows NTによるWin16サブシステムによる実装。

Win32

[編集]

Win32は、32ビットプログラム用の実装である。次のように分けられる。

Win32
狭義のWin32は、NT系の実装を指す。
Win32c
9x系の実装。'c'は「compatibility」(互換)の頭文字である。しかし、現在[いつ?]では9xの実装も区別なくWin32と呼ぶ[19]
Win32s
Windows 3.1用の実装。's'は「subset」(サブセット)の頭文字である。Windows 3.1には搭載されておらず、別途入手?インストールする必要がある。
Win32 for Windows CE[20]
Windows CEの実装。文字コードUnicodeのみを使用するなどの点が特徴的である。
WOW64 (Windows on Windows 64)
Win64上でWin32をエミュレーションするサブシステムによる実装。

Windows NTがx86以外のアーキテクチャに移植されたことに伴い、Win32は各種アーキテクチャ向けに移植されている[21]。また、Windows NTではないが、かつてMacintosh用のWin32も存在し、Microsoft Visual C++ 4.0 Cross-Development Edition for Macintoshとしてクロスコンパイラとともに発売されていた[22]。これらアーキテクチャの異なるWin32の間にはソースコード上での互換性がある。

Win64

[編集]

Win64は、64ビットプログラム用の実装である。2021年3月現在の主流はx64だが、Windows 10ではARM64もサポートされるようになった[23][24][25]

かつてWindows Server 2003およびWindows XPにてIA-64のサポートが始まったが、Windows Server 2008 R2を最後にサポートが打ち切られた[26]

マイクロソフト以外による実装

[編集]

Windows APIの仕様はWindows SDKのドキュメントやMicrosoft Docs(旧MSDN ライブラリ)で公開されており、それを基にしたMicrosoft Windows以外のWindows APIの実装が存在する。

WindowsランタイムAPI

[編集]

WindowsランタイムAPI (WinRT API) は、Windows 8で導入されたWindowsストアアプリ (Modern UIアプリケーション) を開発するためのCOM拡張による高レベルAPI。後継となるWindows 10で導入されたユニバーサルWindowsプラットフォーム (UWP) アプリケーションの開発におけるベースAPIにもなっている。一部のWinRT APIは、従来のデスクトップアプリケーションから利用することもできる[27]。従来のWindows APIは、WinRT APIと対比?区別されるとき、Win32 APIと呼ばれることが多い。

詳細

[編集]

Unicode対応

[編集]
各Win32が実装しているAPI
Win 9x Win NT Win CE
A Yes Yes No
W 一部対応 Yes Yes

Windows NT系では当初からUnicodeが用いられている一方、Unicodeに対応していないWin16と互換性を取るために、Win32 APIから同じAPIに対してマルチバイト文字版とUnicode版の2つを用意し、C/C++のマクロを駆使してコンパイル時にどちらを使うか選択できる仕組みが採用されている[28]。なお、Unicodeの符号化には当初UCS-2が、Windows 2000から正式にUTF-16が用いられている[29]

具体的には、文字および文字列の関わる関数?構造体について、マルチバイト文字(Windowsコードページに基づく、日本語環境であればコードページ932)とUnicode (UTF-16) のどちらを与えることもできるように、2つの関数?構造体などが準備されている。その場合、マルチバイト文字列を与えるべき関数?構造体は末尾に「A」を付け、ワイド文字列を与えるべき関数?構造体は末尾に「W」を付けて区別している。例えば、Win16のMessageBox関数に対して、Win32ではMessageBoxAとMessageBoxWという2つの関数が用意されている。そして、プリプロセッサ識別子UNICODEの定義の有無によって切り替えが行われる。

#ifdef UNICODE
#define MessageBox MessageBoxW
#else
#define MessageBox MessageBoxA
#endif

さらに、文字型に対しても同様にCHAR (charのtypedef) とWCHAR (wchar_tのtypedef) をUNICODEの定義に応じて切り替えるTCHAR型などや、ナロー文字列定数?リテラルとワイド文字列定数?リテラルを切り替えるTEXTマクロが存在する。

#ifdef UNICODE
#define TEXT(s) L ## s
typedef WCHAR TCHAR;
#else
#define TEXT(s) s
typedef CHAR TCHAR;
#endif

これらを適切に用いると、1つのソースコードからコンパイル時のオプションによってマルチバイト文字を用いる実行プログラムとワイド文字を用いる実行プログラムの2種類が作成できる。以下はその例である。

#include <windows.h>
#include <tchar.h> // WinMain と wWinMain を切り替える _tWinMain などが定義されている。
int WINAPI _tWinMain(HINSTANCE hInst, HINSTANCE hInstPrev, LPTSTR lpszCommandLine, int nCmdShow)
{
    MessageBox(NULL, TEXT("Hello, world"), TEXT("App"), MB_OK);
    return 0;
}

なお、Windows NT系におけるA版のAPI関数は、内部的にW版を呼び出すラッパーとなっている[30]。A版APIに入力されたマルチバイト文字列はUnicode文字列に変換されてからW版APIに入力され、W版APIから出力されたUnicode文字列はマルチバイト文字列に変換されてA版APIの出力となる。

このプレフィックスのAはANSI、WはWideを意味する[31]。ANSIは、Windowsコードページの一部がANSI規格のドラフトを元にしたことに由来する[32]ワイド文字 (wchar_t) はC/C++の用語であるが、Windows用のC/C++処理系において、ワイド文字は大抵UCS-2またはUTF-16として実装されている。また、OLE関係では、Win32ですべてUnicode化され、A/Wの区別が存在しない。

なお、Windows 9x系では、Unicode版APIは一部しか実装されていない[33]。ただし、Microsoft Layer for Unicodeを利用することにより、ほぼすべてのUnicode版APIが使用可能になる[34]。また、Windows CEでは、逆にUnicode版APIしか実装していない。NT系でも、Unicodeを前提とした仕様変更が行われたり[35]、Theme APIなど新しいAPIでA/Wの2種を用意せずUnicodeを用いるものだけを用意したりするなど、徐々にUnicodeへ傾斜する傾向にある。

歴史

[編集]

Windows APIの歴史は、もちろんWindows自体の歴史と切り離せない関係にある。常に、Windowsに新機能が搭載されれば、それをアプリケーションソフトウェアから使用するための新しいAPIが追加され、対応する新しいSDKが公開されることの繰り返しである。デバイスドライバーに対応を迫るものは、DDK/WDK経由で公開される。

Windows APIの歴史上、最も大きな変革はWindows NTに伴うWin32の登場だった。ポインタとハンドルも32ビット化されたこと、Unicodeへの対応が図られたことが大きな変化である。

なお、現在[いつ?]は緩やかに64ビットへの移行が進んでいる。Win64では、ポインタおよびハンドルは64ビット化されているが、それ以外では16ビットから32ビットへの移行時のような大きな変化はない。なお、64ビット版Windowsでは32ビットアプリケーションとの相互運用性を確保するため、ハンドルの上位32ビットを使用する仕組みとなっており、ウィンドウ (HWND) などのユーザーオブジェクトハンドル、ブラシ (HBRUSH) やペン (HPEN) などのGDIオブジェクトハンドル、そしてミューテックス、セマフォ、ファイルなどの名前付きオブジェクトハンドルを32ビット/64ビットアプリケーション間で共有し、プロセス間通信に利用することができる[36]。また、64ビット版WindowsではWOW64により32ビットアプリケーションを実行できるが、16ビットアプリケーションを実行することはできない[37][38]

互換性

[編集]

Windows APIはシステム全体で共有するDLLを通じて公開されており、このシステムDLLに変更が入るとすべてのアプリケーションが影響を受けることになる。このため、度重なるバージョンアップやセキュリティパッチの適用によりコンポーネントの互換性を失ってしまうことによるDLL地獄 (DLL Hell) の発生を招くことがある。この点に関しては、Windows 2000で導入されたSide-by-Sideコンポーネント共有や、Windows XPで導入された分離アプリケーションとSide-by-Sideアセンブリの仕組みにより、ある程度の解決が図られている。

基本的にWindowsおよびWindows API自体は互換性に配慮した設計がなされており、バージョンアップの際に既存の公開APIに破壊的変更が入ることはない(時代遅れとなった古いAPIが非推奨になることはあるが、完全に削除されることはまれである)。公開APIを正しく利用して開発されたアプリケーションやドライバーであれば、旧バージョンのOSで正常に動作していたものは、ほとんどのケースにおいて修正することなく動作する[39]。セキュリティ対策のためにWindows Vistaで導入されたユーザーアカウント制御 (UAC) に関しても、通常権限のアプリケーションが直接アクセスできないディレクトリに対する読み書きを仮想化してリダイレクトする仕組みが救済策として用意されている。しかし、アプリケーションやドライバーが特定のバージョンのWindowsでしか動かないような設計になっていた場合、アプリケーションが起動できない、正常に動作しないなどの互換性問題が発生することがある。この問題の回避策のひとつとして、Windowsには、旧バージョンのOSの動作をある程度エミュレートする「互換モード」が用意されている。例えばバージョン番号を取得するためのWindows APIにおいて旧バージョンのOSを偽装した値を返すようにすることで、これらに依存したアプリケーションへの影響を低減する[40]

批判

[編集]

Windows APIはWin16を拡張して32ビット、64ビット化されたという歴史がある。そのため度重なる機能の追加により、高度に複雑化しその習得が困難と化しているという問題がある[41]

Windows 8で導入された新規設計のWinRT APIは、名前空間を利用して体系的に整理されており、効率的かつモダンなアプリケーション開発をサポートするが、Windowsストアアプリ(のちのUWPアプリ)はサンドボックス環境で動作するために制約が多く、サードパーティー開発の主流とはならなかった。結局は従来のWin32 APIや.NET Frameworkを使用したデスクトップアプリケーションが主流のままであるが、Win32 APIによる開発はGUIツールキットのサポートが弱く、レガシーな外観のGUIウィジェットしか使えないなどの問題がある[42]

ラッパーライブラリ

[編集]

Windows APIは比較的低水準であるため、高水準なインターフェイスを持たせたり、C/C++以外の言語から利用したりするための様々なラッパーライブラリやフレームワークが数多く存在する。主なものは次のとおり。

マイクロソフト

[編集]
Microsoft Foundation Class (MFC)
C++クラスによるWindows APIのラッパー。
Active Template Library (ATL)
C++テンプレートによるCOMのラッパー。
Windows Template Library (WTL)
ATLの拡張として作られた軽量のWindows APIのラッパー。現在[いつ?]CPLに基づくオープンソースとなっている。

ボーランド

[編集]
Object Windows Library (OWL)
MFCと同時期に公開され、よりオブジェクト指向に作られたラッパー。
Visual Component Library (VCL)
ボーランドがその後に開発したDelphiによるラッパー。Windows Formsのベースにもなった。

.NET FrameworkやWindows版.NET Coreは、内部的にWindows APIを利用して実装されているものの、基本クラスライブラリなどはプラットフォーム非依存となるよう抽象化されているが、Windows固有の機能を使用したGUIフレームワークや、Windows APIを薄くラップしただけの部分も存在し、System.Windows名前空間やMicrosoft.Win32名前空間などにまとめられている[43][44]

脚注

[編集]
  1. ^ Windows API index - Win32 apps | Microsoft Docs
  2. ^ __stdcall | Microsoft Docs
  3. ^ x64の場合は__fastcallが採用されている。
  4. ^ チャールズ?ペゾルド『プログラミングWindows第5版』 〈上〉、アスキー、2000年10月。ISBN 978-4756136008 
  5. ^ ASCII.jp:MinWinとVirtual DLLで変わるWindowsカーネル (1/2)|あなたの知らないWindows
  6. ^ ASCII.jp:ARM版Windows 8実現の布石となったWindows 7の「MinWin」 (3/4)|基礎から覚える 最新OSのアーキテクチャー
  7. ^ Overview of the Windows API” (英語) (2025-08-14). 2025-08-14閲覧。
  8. ^ a b DirectX 8.0 の紹介 | Microsoft Docs
  9. ^ Getting started with DirectX Graphics - Win32 apps | Microsoft Docs
  10. ^ オーディオのリファレンス | Microsoft Docs
  11. ^ DirectX に関してよく寄せられる質問 | Microsoft Docs
  12. ^ DirectX Frequently Asked Questions - Win32 apps | Microsoft Docs
  13. ^ Windows Multimedia - Win32 apps | Microsoft Docs
  14. ^ OpenGL - Win32 apps | Microsoft Docs
  15. ^ Windows HTTP Services - Win32 apps | Microsoft Learn
  16. ^ 本田雅一の「週刊モバイル通信」
  17. ^ Windows Vistaとは何か?(3/3) - @IT
  18. ^ Petzold, Charles 著、株式会社ロングテール/長尾高弘 訳『プログラミングWindows』 〈上〉(第5版)、アスキー、2000年10月、33頁。ISBN 978-4756136008 
  19. ^ Petzold, Charles 著、株式会社ロングテール/長尾高弘 訳『プログラミングWindows』 〈上〉(第5版)、アスキー、2000年10月、34頁。ISBN 978-4756136008 
  20. ^ Microsoft Announces Visual C++ for Windows CE” (英語). マイクロソフト (2025-08-14). 2025-08-14閲覧。
  21. ^ Cross-Platform Application Development in Windows NT” (英語) (2025-08-14). 2025-08-14閲覧。
  22. ^ Microsoft Visual C++ 4.0 Cross-Development Edition for Macintosh (Archived Visual C++ Technical Articles)” (英語) (1995年7月). 2025-08-14閲覧。
  23. ^ Microsoft、ARM64対応のデスクトップ版Windows 10を計画か - エキサイトニュース
  24. ^ マイクロソフト、ARM64向けWindowsアプリの開発と配布を正式サポート - CNET Japan
  25. ^ Windows SDK 10にはARM64用のインポートライブラリファイルなどが含まれており、従来のネイティブデスクトップアプリとUWPアプリを開発できるようになっている。
  26. ^ マイクロソフト、「Itanium」チップのサポートを終了へ - CNET Japan
  27. ^ デスクトップ アプリで Windows ランタイム API を呼び出す - Windows apps | Microsoft Docs
  28. ^ Working with Strings (Windows)” (英語). MSDNライブラリ. マイクロソフト (2025-08-14). 2025-08-14閲覧。
  29. ^ Surrogates and Supplementary Characters”. MSDNライブラリ (2025-08-14). 2025-08-14閲覧。
  30. ^ Windows XP Professional の多言語オプションの比較”. TechNetライブラリ. 2025-08-14閲覧。
  31. ^ Unicode in the Windows API”. MSDNライブラリ (2025-08-14). 2025-08-14閲覧。
  32. ^ Chen, Raymond (2025-08-14). “Why is the default 8-bit codepage called "ANSI"?” (英語). The Old New Thing. 2025-08-14閲覧。
  33. ^ Other Existing Unicode Support” (英語). MSDNライブラリ. 2025-08-14閲覧。
  34. ^ Microsoft Layer for Unicode Reference” (英語). MSDNライブラリ. 2025-08-14閲覧。
  35. ^ [WinXP] Common Control 6.0 の EM_LIMITTEXT による入力制限”. サポート技術情報 (2025-08-14). 2025-08-14閲覧。
  36. ^ Interprocess Communication Between 32-bit and 64-bit Applications - Win32 apps | Microsoft Docs
  37. ^ Running 32-bit Applications - Win32 apps | Microsoft Docs
  38. ^ 64bit Windows時代到来:第3回 アプリケーションの互換性 (1/3) - @IT
  39. ^ Compatibility and Reliability - Win32 apps | Microsoft Docs
  40. ^ Windowsの互換性テクノロジの仕組み(前編)(1/3) - @IT
  41. ^ 塩田紳二. “.NET「本音」相談室(第1回)Q3:どうしていま、.NETなのか?”. @IT. 2025-08-14閲覧。
  42. ^ ASCII.jp:UWPからデスクトップアプリに回帰すべく、MSが送り出した「Project REUNION」 (1/2)
  43. ^ System.Windows Namespace | Microsoft Docs
  44. ^ Microsoft.Win32 Namespace | Microsoft Docs

関連項目

[編集]

参考文献

[編集]
  • Charles Petzold著 『プログラミングWindows第5版〈上〉』 アスキー、2000年。ISBN 4756136001
  • Charles Petzold著 『プログラミングWindows第5版〈下〉』 アスキー、2000年。ISBN 475613601X
  • Jeffrey Richter著 『Advanced Windows 改訂第4版』 アスキー、2001年。ISBN 4756138055

外部リンク

[編集]
什么是手机号 白带发黄是什么原因 鸡的祖先是什么 西席是什么意思 痱子是什么样的
明年属什么生肖 萎缩性胃炎吃什么药最好 梦见狗咬自己是什么意思 子宫肌腺症是什么病 寻常疣是什么
酥油茶是什么做的 血压高压高是什么原因 337是什么意思 痔疮出血用什么药 潮喷是什么意思
燃面为什么叫燃面 不宁腿综合症吃什么药 吐了后吃点什么能舒服 梦见大象是什么预兆 生殖器疱疹用什么药最好
日语斯国一是什么意思hcv8jop2ns8r.cn 什么人不适合做收银员jiuxinfghf.com 子宫前位什么姿势易孕hcv9jop8ns0r.cn 胃不好适合吃什么水果hcv9jop3ns9r.cn 什么是特应性皮炎hcv9jop6ns5r.cn
贫嘴是什么意思hcv9jop7ns5r.cn 毕业穿的衣服叫什么hcv9jop6ns4r.cn 三月十五日是什么星座hcv9jop0ns5r.cn 脑门疼是什么原因hcv8jop0ns1r.cn 留守儿童是什么意思hcv8jop6ns2r.cn
为什么同房会出血hcv8jop0ns2r.cn 钾低是什么原因引起的hcv8jop1ns7r.cn 巡礼是什么意思hcv8jop8ns0r.cn 造纸术什么时候发明的hcv9jop5ns0r.cn 世袭罔替什么意思hcv8jop2ns3r.cn
做梦笑醒了有什么征兆hcv8jop3ns5r.cn 艾滋病是一种什么病hcv9jop0ns7r.cn 什么情况下才做冠脉ctahcv7jop5ns6r.cn 肾结石长什么样子图片hcv7jop7ns3r.cn 心脏官能症吃什么药hcv8jop3ns5r.cn
百度