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

提供: yonewiki
移動: 案内, 検索
(概要)
(概要)
 
1行: 1行:
 +
[[メインページ#言語と開発環境|言語と開発環境]]へ戻る。
 +
 +
 
 
== '''概要''' ==
 
== '''概要''' ==
  
4行: 7行:
  
  
: 逆は出来ます。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アプリを相互運用するにはそれなりのコツがいるということになります。呼び出しはできないけど、間接的に連動することはできます。
+
: 逆は出来ます。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アプリを相互運用するにはそれなりのコツがいるということになります。呼び出しはできないけど、間接的に連動することはできます。
  
  
10行: 13行:
  
  
: 例えば、WindowsConsoleアプリケーションをVisusalStudioComunity2015だとバッチビルドを選択するとDebugのX86とX64。ReleaseのX86とX64の4種類があらかじめビルドできるようになっています。そこで、以下のようなコードを記述すると、どっちで動作しているか、確認できます。Win32やWin64のウィンドウアプリを作成している場合でも以下のコードを適当な部分に埋め込むことで、確認することができます。
+
: 例えば、WindowsConsoleアプリケーションをVisusal Studio Community2015だとバッチビルドを選択するとDebugのX86とX64。ReleaseのX86とX64の4種類があらかじめビルドできるようになっています。そこで、以下のようなコードを記述すると、どっちで動作しているか、確認できます。Win32やWin64のウィンドウアプリを作成している場合でも以下のコードを適当な部分に埋め込むことで、確認することができます。
 +
 
 +
 
 +
<syntaxhighlight2 lang="cpp" line start="1">
 +
// Win32Console2Win64.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
 +
//
 +
#include<Windows.h>
 +
#include<stdio.h>
 +
#include "stdafx.h"
 +
 
 +
 
 +
int main()
 +
{
 +
BOOL bIsWow64 = FALSE;
 +
IsWow64Process(GetCurrentProcess(), &bIsWow64);
 +
if (TRUE == bIsWow64) {
 +
printf("このプロセスはWOW64(32bit)です。\n");
 +
}
 +
else {
 +
printf("このプロセスは64bitです。\n");
 +
}
 +
return 0;
 +
}
 +
</syntaxhighlight2>
 +
 
 +
 
 +
[[メインページ#言語と開発環境|言語と開発環境]]へ戻る。

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



個人用ツール
名前空間

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