W32 W64プログラミング 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(ページの作成:「== '''概要''' == :32bitWindowsで64bitアプリを動かすことはできません。 :逆は出来ます。Wow64システムがWin32環境をシミュレートす...」)
 
(概要)
 
1行: 1行:
 +
[[メインページ#言語と開発環境|言語と開発環境]]へ戻る。
 +
 +
 
 
== '''概要''' ==
 
== '''概要''' ==
  
:32bitWindowsで64bitアプリを動かすことはできません。
+
: 32bitWindowsで64bitアプリを動かすことはできません。
 +
 
 +
 
 +
: 逆は出来ます。Wow64システムがWin32環境をシミュレートするように動作しますので、64bitWindowsはとても優秀なように感じてしまいます。しかしながら、64bitWindowsからWin32アプリを動かして、そのアプリからWin64DLLや外部のWin64アプリを呼び出して直接連動したりすることはできません。逆はうまくやればできます。64bitWindowsでWin64アプリを動かして、Win32DLLや外部のWin32アプリを呼び出すと、Win32アプリと同じレベルの動作をするように変更することで対応はできます。これはWin32とWin64でポインター変数のようなアドレスを記憶する変数の大きさが違うからです。あらゆるウィンドウオブジェクトはハンドルのようなアドレス変数で、管理されていますから、アドレスを覚える変数は必ず使われます。それが64bitWindowsなら64bit=8Byteで管理されていて、32bitWindowsなら32bit=4Byteで管理されています。32bitだとアドレスでいうと4ギガ個程度のアドレスしか扱えません。昔は4ギガもあれば十分だったんですけど、最近はそうでもなくなってきています。64bitアプリと32bitアプリを相互運用するにはそれなりのコツがいるということになります。呼び出しはできないけど、間接的に連動することはできます。
 +
 
 +
 
 +
: Win64からWin32を呼び出すとなると、すべてがWin32ベースで動作することで、連携することができます。したがって、Win64を使っていると思っていてもいつの間にかWin32なっていることはあります。自分自身が今、何ビットアプリとして動作しているかを確認することはできます。
 +
 
 +
 
 +
: 例えば、WindowsConsoleアプリケーションをVisusal Studio Community2015だとバッチビルドを選択するとDebugのX86とX64。ReleaseのX86とX64の4種類があらかじめビルドできるようになっています。そこで、以下のようなコードを記述すると、どっちで動作しているか、確認できます。Win32やWin64のウィンドウアプリを作成している場合でも以下のコードを適当な部分に埋め込むことで、確認することができます。
  
:逆は出来ます。Wow64システムがWin32環境をシミュレートするように動作しますので、64bitWindowsはとても優秀なように感じてしまいます。しかしながら、64bitWindowsからWin32アプリを動かして、そのアプリからWin64DLLや外部のWin64アプリを呼び出して直接連動したりすることはできません。逆はうまくやればできます。。64bitWindowsでWin64アプリを動かして、Win32DLLや外部のWin32アプリを呼び出すと、Win32アプリと同じレベルの動作をするように変更することで対応はできます。これはWin32とWin64でポインター変数のようなアドレスを記憶する変数の大きさが違うからです。あらゆるウィンドウオブジェクトはハンドルのようなアドレス変数で、管理されていますから、アドレスを覚える変数は必ず使われます。それが64bitWindowsなら64bit=8Byteで管理されていて、32bitWindowsなら32bit=4Byteで管理されています。32bitだとアドレスでいうと4ギガ個程度のアドレスしか扱えません。昔は4ギガもあれば十分だったんですけど、最近はそうでもなくなってきています。64bitアプリと32bitアプリを相互運用するにはそれなりのコツがいるということになります。呼び出しはできないけど、間接的に連動することはできます。
 
  
 +
<syntaxhighlight2 lang="cpp" line start="1">
 +
// Win32Console2Win64.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
 +
//
 +
#include<Windows.h>
 +
#include<stdio.h>
 +
#include "stdafx.h"
  
:Win64からWin32を呼び出すとなると、すべてがWin32ベースで動作することで、連携することができます。したがって、Win64を使っていると思っていてもいつの間にかWin32なっていることはあります。自分自身が今、何ビットアプリとして動作しているかを確認することはできます。
 
  
 +
int main()
 +
{
 +
BOOL bIsWow64 = FALSE;
 +
IsWow64Process(GetCurrentProcess(), &bIsWow64);
 +
if (TRUE == bIsWow64) {
 +
printf("このプロセスはWOW64(32bit)です。\n");
 +
}
 +
else {
 +
printf("このプロセスは64bitです。\n");
 +
}
 +
return 0;
 +
}
 +
</syntaxhighlight2>
  
:例えば、WindowsConsoleアプリケーションをVisusalStudioComunity2015だとバッチビルドを選択するとDebugのX86とX64。ReleaseのX86とX64の4種類があらかじめビルドできるようになっています。そこで、以下のようなコードを記述すると、どっちで動作しているか、確認できます。Win32やWin64のウィンドウアプリを作成している場合でも以下のコードを適当な部分に埋め込むことで、確認することができます。
+
 
 +
[[メインページ#言語と開発環境|言語と開発環境]]へ戻る。

2020年9月28日 (月) 00:00時点における最新版



個人用ツール
名前空間

変種
操作
案内
ツールボックス