質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

3回答

8324閲覧

標準C++とwindowsAPIでアプリケーションを作りたい

fermat

総合スコア183

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

2グッド

2クリップ

投稿2016/12/14 01:23

###実現したいこと
C言語とC++の入門書を読み終えた初心者です。
C++/CLIではなく、標準C++を言語に選び、windowsAPI(Win32API)を使って
アプリケーションを開発したいと考えています。
独学の状態なのですが、おすすめのURLサイトや書籍がありましたら、
どうか教えていただけないでしょうか。

###今の状態
C言語とwindowsAPIの組み合わせで解説された記事や本も見かけるのですが、
C言語を標準C++で置き換えた場合にwindowsAPIの使われ方がどう違うのか分かっていません。

例えば、windowsAPIの使い方として、kernel32.dllを使いたい場合、
①[DLLImport("kernel32.dll",...........)]を加えれば良いとする解説
②#pragma comment(lib,"kernel32.lib")を加えれば良いとする解説

上記二つが見つかったのですが、何が違うのだろうかと混乱しています。

さらにAPIとC言語とで型名がちがうらしいのですが、どの型がどれに相当しているのかということや、
どの範囲までをC言語或いはC++で記述し、どの範囲からAPIで記述すればいいのかということも分かっていません。

このような状態なのですが、よろしくお願いします。

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

こんにちは。

C言語を標準C++で置き換えた場合にwindowsAPIの使われ方がどう違うのか分かっていません。

Windows APIはC言語I/Fになっているだけです。それらはC++から普通に呼べます。
様々なサイトでC言語向けのサンプル・コードが多数あると思いますが、それらはC++でもそのまま使えることがほとんどです。

①[DLLImport("kernel32.dll",...........)]を加えれば良いとする解説
②#pragma comment(lib,"kernel32.lib")を加えれば良いとする解説
上記二つが見つかったのですが、何が違うのだろうかと混乱しています。

前者は.NET向けなので、C++/CLI用に拡張された機能です。標準のC++では使えません。
後者は、VC++専用機能です。#pragmaは処理系ごとの専用機能を実装する際に使われることが多いです。
一般的には、リンカにてリンクするライブラリを指定します。

Visual Studioの新規プロジェクトで、Win32プロジェクトを選べば自動的にリンカ・オプションに基本的なWindows APIを使うのに必要なライブラリが追加されます。

投稿2016/12/14 02:17

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

majiponi

2016/12/14 02:24

ネット向けの命令ですか。コンパイラの違いか、私の知らないコマンドだと思っていました。訂正ありがとうございます。リンカの話、やっぱしたほうがよかったですかね。話が脱線するかなとそれとなくしか書かなかったですが。
fermat

2016/12/14 09:10

プログラミングの内容に行く前に、APIを使うための基礎の基礎から分かっていないので、 勉強になっています。 Visual Studio で新規プロジェクトを作る段階の設定でAPIの環境が整うのだと分かり、 APIは、これを使うために何かをダウンロードするのだろうか、ビルドしたときに勝手にどうにかしてくれるのだろうかと思っていた疑問が解決しました。 また、APIを呼び出すにあたって.NET向けの命令とVC向けの命令が違うということも勉強になりました。APIについては、まだ暗闇に目が慣れていないような状態ですが、また頑張ってみようと思います。ありがとうございます。
Chironian

2016/12/14 14:20

新規プロジェクトでWin32プロジェクトを作れば、最小限のWindows APIを使ってウィンドウを表示する雛形が作られるようです。 単純にビルドしただけで最低限の動作ができますので、各種入門サイトのサンプルと見比べつつ、ステップ実行等しながら学習すると効果的と思います。 頑張って下さい。
fermat

2016/12/18 09:27 編集

只今、WinMain関数を触って、少しずつ様子を見ている状態です。 APIは、慣れがないと厳しい…という印象なので、サンプルをいくつもこなそうと思います。 おかげで、ソリューションやプロジェクトの作り方も分かってきました。感謝!!
guest

0

基本的に、C言語を標準(ネイティブ)C++で置き換えても、ネイティブC++はC言語を拡張しただけのものなので、コードを書き換える必要はないです(一部互換性ないコードもありますが)。APIの使い方は変わりません。

DLLの使い方は流儀が様々ありますが、要するに「はろー」と言うか「コニチワ」と言うかの違いで、意味は変わりません。どの書き方でもokです(実際、私はもっと別の書き方をします)。

型名は基本的に全部、ヘッダファイルのものを使っていいと思います。高度なことをするために、別のライブラリと併用するなどするときに初めて、対応関係を把握するので十分。

参考文献は、「猫でもわかる」をオススメします。Windows SDK編の第1部あたりから読むといいです。
http://www.kumei.ne.jp/c_lang/

投稿2016/12/14 01:56

majiponi

総合スコア1720

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fermat

2016/12/14 09:01

CとC++でコードを書き換える必要はないとのことで、驚いています。 猫でもわかるのSDK編がwin32APIの学習に相当するのだということも、 こちらのコメントで初めてわかり、もっと早くに質問していればよかったと思いました。 実は、猫でもわかるの書籍版の方(windowsプログラミング編)が絶版になっているなど、 情報が少なかったので、インターネットの中をグルグル歩いている状態でした。 型名はヘッダファイルのものをということで、ファイルの中身を良く読み進めようと思います。 ありがとうございます。
guest

0

C言語とC++の入門書を読み終えた初心者です。
C++/CLIではなく、標準C++を言語に選び、windowsAPI(Win32API)を使ってアプリケーションを開発したいと考えています。

正直にお伝えしておくと、入門書を読み終えた段階で「C++言語×WinAPIのみでアプリケーション開発」は相当に高難易度かと思います。C++言語とWinAPIそれぞれにある程度慣れていたとしても、その組み合わせでの開発は 苦痛 と言って差し支えないレベルです。

プログラミング言語やAPI・ライブラリ・フレームワークには適材適所がありますので、絶対にC++言語×WinAPIの組み合わせで学習するのだという強い意志が無いと途中で挫折することになります。まずは、どんなアプリケーションを作りたいのか?(便利なGUIツール?ゲーム?など)という点を整理してみてください。


おすすめのURLサイトや書籍

majiponiさん回答にある「猫でもわかるプログラミング WindowsSDK編」が一番情報が充実していると思います。


C言語を標準C++で置き換えた場合にwindowsAPIの使われ方がどう違うのか分かっていません。

WinAPIの使い方は、C言語とC++言語で全く同じです。WinAPIはC言語向けの関数として提供されますが、C++言語からはCの関数をそのまま呼び出せます(C++プログラムからC言語ライブラリのprintf関数を呼びだせるのと同じ)。

補足:DirectXなどCOMベースのAPIでは、C言語よりもC++言語からの方が扱いやすいことはあります。ただ、一般にWinAPIというときはレガシーなC言語インターフェイスの範囲内を指すと思われますので、C/C++での差異は無いと説明しています。

(厳密にはリンク時の名前マングリング規約などの留意点があるのですが、WinAPI提供ヘッダファイル内で考慮されているのでここでは無視します)

さらにAPIとC言語とで型名がちがうらしいのですが、どの型がどれに相当しているのかということや、

WinAPIは固有の型(LPCTSTR, DWORD, LPVOID等)を大量に定義しています。これらはWindows OSの歴史的経緯もあり、全てを学習するのは難しいと思います。正直なところ相当な時代遅れ感もあり、これから新たに学習するのは全くおすすめできません。

ここでは、頻出の型のみを簡単に説明します:

  • WORD=16bit符号なし整数型, DWORD=32bit符号なし整数型
  • 型名の先頭がLPまたはP = ポインタ型
  • LPxxSTRxxW/T/C/CW/CT)型 = 文字列型。無印=ANSI(Native)/W=UTF-16/T=Universal、C=const

より詳細を知りたければ、MSDN内を検索してください。

どの範囲までをC言語或いはC++で記述し、どの範囲からAPIで記述すればいいのかということも分かっていません。

絶対的な指標はありません。一部の機能(例:ファイルの読み書きなど)はC/C++標準ライブラリとWinAPI両方で提供されますが、どちらが好ましいかはケース・バイ・ケースでしょう。

投稿2016/12/14 03:25

編集2016/12/14 03:39
yohhoy

総合スコア6189

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fermat

2016/12/14 09:24

軽い動作のアプリが作りたくて苦痛に覚悟を決めて勉強しようと思ったところ、 資料が少なく…といった状態です^^; WinAPIの使い方は、C言語とC++言語で全く同じとのことで、C言語ベースのAPIの解説サイトをおかげで、安心しながら読み進めることができそうです。 どの範囲までがAPIというのもルールなくケースバイケースとのことで、理解の深度に合わせて書き方を変えてみようと思います。型の詳細が分かるリンク先も勉強になっています。 ありがとうございます。
yohhoy

2016/12/15 00:17

C++からWinAPIを使いやすくするラッパーライブラリとして、「Windows Template Library (WTL)」が存在します。イメージとしてはMFC/ATL風のインターフェイスを提供しながら、ランタイムライブラリを使わない軽量WinAPIラッパークラスライブラリです。 https://sourceforge.net/projects/wtl/ 情報源は少ないのですが、C++言語で記述する「軽い動作のアプリ」が目的であれば便利かもしれません。
fermat

2016/12/18 09:27

軽いライブラリを教えて下さって、ありがとうございます。 APIの基本のプログラミングをしつつ、並行してWTLの情報も集め始めようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問