• ベストアンサー
  • 暇なときにでも

Win32APIは覚えて損する?

Win32APIは現在一般的に出回ってる32Bit版Windowsの ApplicationProgramingInterfaceですよね? これがそのうち一般的に出回るのが64Bit版Windowsに なったときもWin32APIを勉強したときの知識は役に たつのでしょうか? またWin16→Win32に変わったときはどのような感じだ ったんでしょうか? あと少々質問とずれてしまいますが○○Bit版Windowsの [○○Bit版]はどのような意味を持つのでしょうか? 暇なときにでも回答できたらお願いします ※ ○○=16 or 32 or 64 など

共感・応援の気持ちを伝えよう!

  • 回答数6
  • 閲覧数1558
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.6

>64Bit版WindowsになったときもWin32APIを >勉強したときの知識は役にたつのでしょうか? ネイティブでモジュールを作れば、Win32Apiの環境でも 64bitで動作するソフトウェアを開発することは可能です。 内部的にどうなっていようと、公開される関数の 使用方法が変わっていなければ、十分に役に立つと思います。 (#1さんが言っているようにそこはMSしだいです) >Win16→Win32 昔はDOSプログラミングが殆どだったようです。 最近のXPなどのWindowsOSにはMS-DOSに似たような、 「コマンド・プロンプト」がありますが、一応別物です。 「エスケープシーケンス」などが使えません。 WinApiは16Bitと32Bitで関数名自体が違う場合があったようです。 Win32Apiからはこれらはマクロ制御で切り替えを行っているところ もあるようですが、レジストリ操作などはx64用と32bit用を併用する 場合などが存在する物には別々に用意されているようです。 (x64とx86のレジストリ位置が違う為) >○○Bit版Windowsの[○○Bit版]はどのような意味を持つのでしょうか? CPUの表現域が変わり、それに伴って ソフトウェアが使用できる表現域も変わってきます。 例えば、分かりやすい(見やすい)所では32BitOSでは メモリを4GB搭載したHW上でも32bitOS上で認識される メモリの最大容量は3.25GBちょっとです。 しかし、64BitOSでは4GB以上でも認識されます。 これは、4GBの数値が符号なしの整数で、 32bitでは表しきれないためです。 2つの最大Bitを2進数で表すと以下のようになります。 32Bit 1111 1111 1111 1111 1111 1111 1111 1111 64bit 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111

共感・感謝の気持ちを伝えよう!

質問者からのお礼

32bitと64bitの違いってそういう意味だったんですか・・・ 了解しましたありがとうございます。

関連するQ&A

  • MFCなのかWin32APIなのか

    みなさんはじめまして。グフです。 これからWindows上でC/C++(VisualStudio.NET2003) にて、Windowsアプリケーション開発の勉強を始め ようとしています。 いろんなサイトや書籍を見ている中で、Windowsアプリ の開発方法としてMFCをつかうやり方と、Win32APIで 開発する方法の2つがあることがわかりました。 これからWindowsの勉強を行うにはどちらの方法で開発 するのが望ましいのでしょうか? ケース by ケースだとは思いますが、何かアドバイス いただければと思いまして、投稿させていただきました。 やはり基礎からおさえるのであれば、Win32APIの方が よろしいのでしょうか? 今後のWinFX環境を考えると、Win32APIでの知識が無駄 になってしまうということはないのでしょうか?

  • APIって。。。

    ネットで調べてもAPI(Application Program Interface)の言葉自体の意味は載っているのですが、 「例えば」の話が無いので、言葉の意味に実感がわきません。 どなたか分かりやすく教えてください。。。 

  • C言語でWin32API

    C言語を使ってWin32APIを呼び出すような、Windowsプログラミングを始めたいんですが、何かよい本やサイトはご存知ないでしょうか。 Visual C++6.0はあるんで、それを使えばいいと思うんです。 C言語はわかるんですが、Windowsプログラミングに関する知識はほとんどないので、ごく基本的なことから知りたいんです。 WinMain関数というのを書くようなんですが、その書き方すら知りません。  スケルトン(出来れば、それよりもっと基本的なこと)から書いてあるようなものです。

その他の回答 (5)

  • 回答No.5

★アドバイス >Win32APIは覚えて損する?  損はしないと思います。 ・理由は Windows OS の内部は API で動いていると見れば、API を知ることは OS の  仕組みを理解する近道になります。また、例え今後 API 関数が利用できなくなっても  ソフトウェアを作成するために必要になる処理は提供されます。この提供される処理も  API と同じような機能だと思いますので Win32 API の知識は無駄にはなりませんよ。 ・C → C++ → MFC という感じで Windows プログラミングをするときも API の知識が  あるか、無いかでは随分と理解力が変化しますので。API を知っている方が新しい  処理が提供されたときにより早くに理解して習得できるはずです。 ・これは言語も同じです。  どれか1つの言語を主要言語として知っていれば、他の言語も1ヵ月もあればかなり  理解してプログラミングできるようになりますよね。例えば C → C++ → Java → C#  という感じで習得できます。 ・要するにプログラミングの概念があれば早くに他の言語も習得できるので、Win32 APIも  知っていれば 64 ビット版の API が登場しても API が廃止になって新しい処理が提供  されてもどの道すぐに理解できるはずです。 ・よって『Win32APIは覚えて損する?』の質問は損はしないとアドバイスします。 ●アドバイス2 >[○○Bit版]はどのような意味を持つのでしょうか?  回答者 No.3 さんのアドバイスにあるように C 言語でいうポインタのサイズが違うのです。  また、64Bit版の Windows Vista は 32 Bit版のプログラムと 64 Bit版のプログラムが  共存できるようです。タスクマネージャにその情報が表示されるようです。  私は使ったことが無いため確認は出来ませんが、今年パソコン雑誌を読んで知りました。 ・Windows Vista は去年にすでにバグが 7 つほど発見されていたようです。  修正することなく販売したようです。よって、SP1 が出るまで私は買わないかな。 余談: ・私は MS-DOS 時代からパソコンを始めました。  このため Windows 時代になってもコマンド・プロンプトをときどき使っています。  でも、最近始めたパソコン・ユーザさんは『コマンド・プロンプト』を知らなかったり、  難しいと考えてしまいます。MS-DOS 時代では基本知識であったコマンド・レベルの知識を  知っていると難しいとは思いません。むしろ、機能が拡張されて便利になったね。と思います。 ・このことから昔の知識が『今』でも役に立っているのです。API の知識も同じですよ。 ・以上。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

>最近始めたパソコン・ユーザさんは『コマンド・プロンプト』を知らなかったり 確かに僕も名前くらいしか知らないですね(2000年にPC始めた) 覚えておいて損でないことがよくわかりましたありがとうございます。

  • 回答No.4

覚えなくても、 必要な時、レファレンスマニュアルを 引っ張り出して、調べればすむことでは、 どの関数もCの関数の標準的な使い方に、 のっとっておりますし。 ちなみに、Win32の前はWin32sで、 このときには、Windowsプログラミングをする者は少なかったようです 16ビット版では、Windowsプログラミングは、ほとんど知られていなかったとか。 DOSプログラミング全盛だったんですな。

共感・感謝の気持ちを伝えよう!

  • 回答No.3
  • furyfox
  • ベストアンサー率56% (58/103)

>○○Bit版Windowsの >[○○Bit版]はどのような意味を持つのでしょうか? 最大の違いはメモリ空間だと思います。 具体的にはWindowsXp(32bit)の場合、 物理メモリを4GB(ギガバイト)までしか認識できません。※4GB = 32bit また1プロセス(1つのアプリケーション)が確保できるメモリは2GBです。 しかしVista Ultimate 64bit版では128GBまでのメモリを認識できます。 またVisual C++ 2005ならコンパイル時のオプションで 64bitを選べばポインタのサイズが64bitになります。 32bit版 sizeof(int*) → 4 64bit版 sizeof(int*) → 8 アプリケーションによっては1プロセスで2GBでメモリでは 十分でないものもでてきています。(例えばAdobeのPhoto shop等ですが64bit版もでるようです。) そういうソフトは64bit化する事による恩恵があります。 で肝心の質問のWin32API が使われなくなる可能性はあるけど、それはどの技術を学んだところで同じ事です。 現時点ではVistaも結局ネイティブはWin32APIになりましたしまったく使わなくなるのは当分先です。 仮に時期Windows(3年後?)に廃止になったとしても その知識がまったくの無駄にはなるとは思えません。 >またWin16→Win32に変わったときはどのような感じだったんでしょうか? Win16は現在のWindows Vistaでも基本的には動きます。 Win16→Win32では単純にAPIの種類が増えて、そのWin32は新しいOS(Windows95以上)でしか 使えなかったという事です。

共感・感謝の気持ちを伝えよう!

  • 回答No.2
  • jacta
  • ベストアンサー率26% (845/3158)

Win32 APIに限らず、覚えて損をすることというのは、そう多くはありません。 確かに、そのものズバリが役に立たなくなる可能性はありますが、将来登場するであろう様々な技術も、過去や現在のものを基礎として作られるわけですから、それらの習得が容易になることはほぼ間違いありません。 また、過去~現在の技術に関する知識・経験は、今後自分がそれらに変わる技術を生み出す立場になったときには、必要不可欠なものとなることでしょう。

共感・感謝の気持ちを伝えよう!

  • 回答No.1
noname#39970

64bitになると、CPUの命令コードが増える 32bitではそれに対応できない(命令コード無いんだから対応しようがない) API知識は、役にはたつだろうがソースがそのまま使い回せるかはMicrosoftの作り方にかかっている。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • C++ API 全般 APIの概要は

    独学にてプログラミングを勉強しているのですが、いきづまってしまったので質問お願いします。 ※Visual Studio 2008 Express Editionsを使用しています。 まだプログラミングに関しての勉強を始めて1ヶ月程度で、最初はVB.NETから始めて、最近C++に乗り換えました。 趣味の範囲でのゲームを作ろうと思っていて、C++とDirectXでの開発を予定しています。(しかし、最終的にはゲームに限らずプログラミングの技術と知識を習得することを目標にしています。)(DirectXに関してはまだ手をつけていません。) まったく1からのスタートで、現在win32コンソールアプリケーションにてコードの勉強をしているところです。 勉強に使っている参考文献は ・VisualC++.NET逆引き大全500の極意 ・ゲームプログラマになる前に覚えて起きたい技術(これを買うには早すぎたようです…。第一章も半分くらいしか理解できません…。) サイトは ・主に「0からのゲームプログラミング」というサイトです。 http://www.plustarnet.com/aspil/Programming/ 本題の質問ですが、APIというものがいまいち理解できません。 (1)上記のような目的で使用するAPIは、標準 Windows APIというものでいいのでしょうか? (2)win32コンソールアプリケーションでは実行できるのに、win32プロジェクトでは実行できないのはなぜでしょうか? #include<windows.h> int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { MessageBox(NULL , TEXT("Hello Wold!") , TEXT("メッセージボックス") , MB_OK); return 0; } (3)http://www.plustarnet.com/aspil/Programming/CConsole.htm このURLのコンソールAPIというのは、一般的に使われているものでしょうか?それともこのサイトのオリジナルのものでしょうか?win32コンソールアプリケーションでAPIを使うには、このURLのCConsoleクラスとうものをインクルードしないといけないのでしょうか?#include<windows.h>と宣言することによって気軽に使いたいものを使うことはできないのでしょうか? (4)#include<windows.h> とした場合、作るものが「win32コンソールアプリケーション」だったり「win32プロジェクト」だったり「windowsフォームアプリケーション」だったりで、使用方法などがまったく別になってしまうのでしょうか? (5)そもそも、上記の目的の場合APIを勉強する必要はあるでしょうか? (6)勉強をしたほうが後々に役立つ場合、どのAPIを勉強するのがいいのでしょうか?(APIといっても様々なものがあるんだなと思い質問しました。もし勘違いでAPIというものは一つしかないとしたらすみません。) なぜAPIに関してかというと、単純に上記のサイトで言語編の一番上から順に見ていったからです。 初心者すぎて質問が的外れかもしれませんがよろしくお願いします。

  • XPの頃のWin32APIの本などはまだ役に立つ?

    1999年頃学生でC言語を勉強し平行してC言語だとWindowプログラムが 作るのが大変だったことからVBも少しやりました。 頭が悪かったもので、その後、VC++6.0を使いWindowsプログラミングを 作る以前の段階で挫折し勉強の難しさに悶絶し病んで廃人となりニートをやっていました。 その後、なんとなくプログラミングに未練があり、Windows APIの本を買ったり JAVAの本を読んだりHTMLやVBS、CSSなどを勉強してみたりしましたが 途中でいつも投げ出して中途半端でした。 そして再び、最近、プログラミングの本を読む機会があり、 知り合いの友人に感化されたこともあり、 Rubyを勉強し始めたのですが、 Win32 API? RubyでWindowsプログラミングを作ることに特化した本が200円で売っていたので 2007年の本でしたが購入してみました。 Win32OLEについて解説してありました。 Rubyに関する知識がまだあやふやな部分があり、またCOMやAPIに関する知識も ???なのであまり理解できませんでしたが、 なんとなく雰囲気のさわりのさわりぐらい分かりました。 とりあえず、昔は頭が悪く非常に精神的にも混乱していて よくわからずなんでも取り組もうとしてしまいました。 WEBページなどの処理をするにはHTMLのほかにDOM、CSSなどの知識 Java scriptなどの知識であっているでしょうか? ruby php phython perl などいろいろあるがこれは特性をみて自分がやりたい言葉のようなものなので 母国語を一つマスターすべきということは理解しました。 また、Windowsプログラミングを作るのであれば、 APIやCOMなどの知識があればいいのでしょうか? FLASHやActiveXのように現在お目にかからない仕様もあるのですが、 これらも内包していまでも学ぶ価値はあるのでしょうか? 出来ればでいいのですが、 安く仕入れられるプログラミング書籍でも活用が可能な技術を 教えてください。 教えてくださいと言ってもC言語を覚えればOSだって作れるよとか アセンブラ覚えれば完璧ですとかそういうのは無しで 一般的なバカなおじさんがなんとなプログラミングを作るうえで知っていた方がいい 知識や導入方法、パーツなどを教えてくださいよろしくお願いします。 一応、今、RubyとVBS、CSS,HTMLを勉強しています。 DOMの知識はあまりないです?説明してみろといわれてもあやふやな答えしかできません よろしくお願いします。

  • ポケモンGoでもAPI?

    お世話になります。 API(Application Program Interface)の意味が解りません。 ネットで検索してもぼんやりとした解説にしか思えずハラ落ちしておりません。 何となく「システム間の連携についての決め事」のように感じるのですが 想像の域を出ておりません。 掲題の通り、スマホゲームの記事にも当たり前のように APIという用語が使われており、理解できていないことに 危機感を覚えております。 私のような素人にでも解るようなご説明をいただけると幸いです。 宜しくお願い申し上げます。

  • C++とWIN32APIとゲームプログラミング

    WINDOWSで動くゲームを作りたくて3日ほど前からC++の勉強を始めました。 (最終的にはグラディウスのような横スクロールシューティングが作りたいです。) そこで質問なんですが 1、Win32APIについて調べるとC言語を使っての入門サイトばかりがヒットします。 Win32APIはC言語で書くものなんでしょうか? そうなってくると今WindowsのGUIアプリを作るのにC++を勉強していますが無駄ってことでしょうか? 例: 猫でもわかるプログラミング http://www.kumei.ne.jp/c_lang/index.html Win32API入門 http://wisdom.sakura.ne.jp/system/winapi/win32/index.html ちなみに今学習に利用しているサイトは以下のサイトです。 C++入門 http://www.asahi-net.or.jp/~yf8k-kbys/newcpp0.html 2、ポインタの概念について ポインタのイメージですが値を格納している場所みたいな感じで大方あってますでしょうか? 僕は組み込み系をやっているのでアセンブラにどっぷり漬かっています。 なんていうかレジスタの番地がポインタに該当するのかなって思っています。 ↓みたいなイメージで考えています。 ポインタ=データの場所=レジスタ番地 これであってますか? 3、まだGUIには進んでませんがウインドウのメニュー(ファイル、編集等)を作るのにリソースファイルも作るって説明が上記ページ(猫でもわかる)に書いてましたがリソーススクリプトとかヘッダーもプログラム言語とは別に勉強する必要があるんでしょうか? 4、C++のクラス概念について クラスとは複数の関数をひとまとめにしてグループ管理(おおざっぱに言うとサブルーチンの集まり的な)するようなものってイメージであってますか? 5、WindowのGUIアプリのプログラムの概要ですが各オブジェクト(ウインドウやボタン、マウスポインタ等)に対して「クリックされた」とかのアクションに対して動作するプログラムを書くって事でいいんでしょうか? 6、お勧めの参考書籍について 今までアセンブラをはじめPerlやJavaScript、C言語のお勧め入門書をいろんなサイトのレビューを見て買いましたが本よりネットの入門サイトのほうがかなり役にたってきました。それでも入門書を買うのは気持ち的に安心するからなんですが・・・ それを踏まえた上で僕の最終的な目的にあうような本があったら是非教えてください。 7、勉強の進め方や「合わせてこれも勉強しろ」っていう項目があれば教えてください。 現状としては 「C++の基礎(必要ですか?)」→「Win32API」→「DirectX」で行こうと思っています。

  • Win32アプリのデータ保存/読込の手段について

    【環境】WinXP/VC++6.0/Win32アプリ(MFC未使用) 【件名】Win32アプリのデータ保存/読込の手段について お世話になります。 下記前提のWin32アプリの場合、外部ファイルへのデータ保存/読込を行う手段として、INIファイル操作のAPI GetPrivateProfileStruct()とWritePrivateProfileStruct()等 を使用することが妥当かどうかについて、ご意見・ご指摘いただけますでしょうか。 【前提】 1)扱うデータは全てバイナリで、各データは構造体単位で管理する。 2)各データ(構造体)の容量は20バイト~100バイト程度。 3)各データ(構造体)は、カテゴリーとキーの組み合わせで一意に識別する。 4)関連のあるデータ(構造体)は同じカテゴリーとして管理する。 5)Windows32bitのマシン上での動作のみを想定している。 6)ファイル内での各データ(構造体)の開始位置は可変としたい。  ※データ(構造体)の種類と、容量が増減(構造体メンバの増減)する可能性があるため。 7)可能な限り、レジストリを使用したくない。 8)データ保存/読込の頻度は、アプリの起動時・終了時のみ。 【私見】 下記Win32APIの仕様が、前提1)2)3)4)6)を容易に実現するのに適している。 GetPrivateProfileStruct() WritePrivateProfileStruct() 【懸念】 前提5)に関して、MSDNではこれらの関数は16ビットWindowsアプリケーションとの互換性を保つために用意されているもので、 Win32アプリケーションではレジストリを使用するよう推奨されています。 以上よろしくお願いいたします。

  • IP Helper APIを使うとエラーが発生する

    プログラミング初心者です。 Visal Studio 2010を使用してC++の勉強をしています。 http://www.geekpage.jp/programming/iphlpapi/interface-info.php 上の記事を参考にIP Helper APIのプログラミングを試してみたのですが、エラーが出てしまいコンパイルできません。 「Windows.hをインクルードすると良い」という記事を見つけて試しましたが、同様のエラーが出るだけでした。 //コード------------ #include "stdafx.h" #include <WinSock2.h> #include <IPHlpApi.h> #include <Windows.h> int _tmain(int argc, _TCHAR* argv[]) { PIP_INTERFACE_INFO pInfo = NULL; ULONG ulOutBufLen = 0; DWORD dwRetVal = 0; /* 変数ulOutBufLenに必要なサイズを取得 */ if( GetInterfaceInfo(NULL, &ulOutBufLen)==ERROR_INSUFFICIENT_BUFFER ){ pInfo = (IP_INTERFACE_INFO *)malloc(ulOutBufLen); } return 0; } //実行結果---------- error LNK1120: 外部参照 1 が未解決です。 R:\Programming\VisualStudio2010\Projects\IPHLPAPIの利用\Debug\IPHLPAPIの利用.exe IPHLPAPIの利用 error LNK2001: 外部シンボル "_GetInterfaceInfo@8" は未解決です。 R:\Programming\VisualStudio2010\Projects\IPHLPAPIの利用\IPHLPAPIの利用\IPHLPAPIの利用.obj IPHLPAPIの利用 //------------------ ちなみに、main内の5行目「GetInterfaceInfo」は「IPHlpApi.h」内にちゃんと存在しています。 以上になります。長文お読みいただきありがとうございました。 色々検索してみましたがお手上げ状態です・・・よろしくお願いいたします。

  • 点の描画について(win32API)

    win32APIでウィンドウに点を描画するプログラムを作ったのですが、SetPixel関数で点を描画しようとすると、特定のx座標に点が描画されません。線は普通に描画されるのですが・・・。 /*ソース*/ #include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT Msg, WPARAM wp, LPARAM lp) { static HDC hdc; static PAINTSTRUCT ps; switch(Msg) { case WM_PAINT: //【ここです!】 hdc = BeginPaint(hwnd, &ps); MoveToEx(hdc , 0 , 300 , NULL); //比較のため線を引く準備 LineTo(hdc,1200,300); //比較のため線を引く for( int j = 1000; j > 0 ; j-- )SetPixel( hdc, j, 100, RGB(0,200,100) ) ; for( int j = 1000; j > 0 ; j-- )SetPixel( hdc, j, 200, RGB(0,200,100) ) ; //ここで点を描画 EndPaint(hwnd, &ps); return 0; case WM_DESTROY: //終了処理 PostQuitMessage(0); return 0; } return DefWindowProc( hwnd, Msg, wp, lp ); } //↓ごく普通のWinMainです。無視してください。 int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { HWND hwnd; MSG msg; WNDCLASS winc; winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName = NULL; winc.lpszClassName = TEXT("KITTY"); if (!RegisterClass(&winc)) return -1; hwnd = CreateWindow( TEXT("KITTY") , TEXT("Kitty on your lap") , WS_OVERLAPPEDWINDOW | WS_VISIBLE , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , NULL , NULL , hInstance , NULL ); if (hwnd == NULL) return -1; while( GetMessage(&msg , NULL , 0 , 0) ) DispatchMessage(&msg); return msg.wParam; } 解決策を模索するもうまくいかず・・・どうか回答よろしくお願いします。

  • Win32APIにて、ウィンドウ全体をドラッグして動かしたいのですが。

    こんにちは。 いつもお世話になっております。 小生、只今WindowsXPSP3上で、C言語とWin32APIを使用し、BCC5.5.1でコンパイルしながら、Windowsプログラミングを勉強しています。 度々、質問させて頂き、その都度回答を頂戴し、誠に恐縮ではあるのですが、今回も質問させて下さい。 下記のコードをコンパイルすると、タイトルバーをドラッグして移動する事は出来るのですが、ウィンドウ全体(クライアント領域も含めて)移動するにはどのようにすればいいのでしょうか?? /* ウィンドウ表示 */ #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE, LPCSTR); BOOL InitInstance(HINSTANCE, int, LPCSTR); int WINAPI WinMain( HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MSG msg; BOOL bRet; LPCSTR szClassName = "Window"; if(!InitApp(hCurInst, szClassName)){ return FALSE; } if(!InitInstance(hCurInst, nCmdShow, szClassName)){ return FALSE; } while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0){ if(bRet == -1){ MessageBox(NULL, "GetMessage Error", "Error", MB_OK); break; } else{ TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } //ウィンドウクラスの登録 ATOM InitApp(HINSTANCE hInst, LPCSTR szClassName) { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hCursor = (HCURSOR)LoadImage( NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = (LPCSTR)szClassName; wc.hIconSm = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } //ウィンドウの生成 BOOL InitInstance(HINSTANCE hInst, int nCmdShow, LPCSTR szClassName) { HWND hWnd; hWnd = CreateWindow( szClassName, "Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, NULL, NULL, hInst, NULL); if(!hWnd){ return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { switch(msg){ case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; } お忙しい中申し訳ございませんが、 先輩方、アドバイス宜しくお願い致します。

  • win10 64bit バッチfile

    バッチファイルが1step毎に止まらない https://answers.microsoft.com/ja-jp/windows/forum/windows_10-files/%E3%83%90%E3%83%83%E3%83%81%E3%83%95%E3%82%A1/a994c31b-804e-4329-b892-18774ad43b08 microsoft community で問い合わせしています。詳細上記参照 64bitPC, win10 pro 1803 (build 17134.320) 掲示板最後のコメント c ウィンドウズスクリプトプログラマ - Windows Script Programmer 2018 ウィンドウを探して、監視すればできるでしょうが、バッチでは不可能です。 powershellなら可能です。がんばってください。 powershellは実際は.NETプログラミング、win32apiプログラミングですからできて当然ですけど。 解決策を教えてください。

  • x64プログラムでアドレスが32bitになる理由

    はじめまして。 私は趣味でCPUや機械語の勉強をしているのですが、 非常に初歩的な部分でどうしても分からないことがあったので質問させて下さい。 WindowsのVisual C++ 64ビットコンパイラで MessageBox(NULL, "message", "caption", MB_OK); をコンパイルすると、以下のコードが出力されます。  0000000140001004: 45 33 C9      xor  r9d,r9d  0000000140001007: 4C 8D 05 F2 9F 00 lea  r8,[4000B000h]             00  000000014000100E: 48 8D 15 F3 9F 00 lea  rdx,[4000B008h]             00  0000000140001015: 33 C9       xor  ecx,ecx  0000000140001017: FF 15 F3 71 00 00 call  qword ptr [40008210h]  000000014000101D: 33 C0       xor  eax,eax このうち、最後から3行目のxor(NULLに該当するところ)がecxになっている理由が分かりません。rcxではないのでしょうか? 戻り値もeaxなのが気になります。 他のパラメータも見ると、64bitのレジスタを使っているのはmessageとcaptionへのポインタのみで、それもleaに渡すRVAは32bitです。 エントリーポイントも140000000のはずなのに、leaの[4000B008h]では33bit目の1が抜けています。 64bitとは具体的にどこがどう64bitなのでしょうか? それとも64bitOSになってもWin32APIはWin32APIのままなのでしょうか? 64bitOSで4GBを超えるメモリを使いたいときはどういう技術を使えばよいのでしょうか?Win32APIにそのポインタを渡したい時は? 実行ファイルのサイズは2GBまでということですが、全てのセクションが持てる仮想アドレス領域の合計も4GB以内に制限されているのでしょうか? いろいろ調べ、考えてみましたが、納得の行く理解ができません。 浅学ですが、詳しい方がいましたら教えていただければ助かります。 よろしくお願い致します。