Windows API   Ubuntu

ホーム   C/C++チュートリアル


Cプログラミンの一環として始めた Windos API ですが、やってみたら面白かったので、もっと詳しく、かつ簡単に、ステップバイステップで学習するコーナーも作りました。
Windows API Primer
Primer は、入門書という意味です。

Wine

macOSやLinuxなどでWindowsアプリケーションを実行するにはWineというソフトウェアを使います。 Wineは、Parallels Desktopなどとは違い、OS自体を仮想化するのではなく、あくまでもmacOSやLinux上でWindowsアプリケーションを実行できます。

この章では、Ubuntu 20.04でWindows実行ファイルをコンパイルして、その .exe をWineを使って実行する方法を説明します。Ubuntu上でWindows実行ファイルをコンパイルするにはmingw-w64というソフトウェアを使います。

必要なソフトウェア

今回インストールするソフトウェアは次のとおりです。

mingw-w64
macOSやLinuxでWindows実行ファイルをコンパイルするソフトウェアです。Ubuntuにデフォルトで用意されているaptパッケージマネージャーを使ってインストールします。
Wine Stable 5.0
2020年5月16日現在のWineの最新安定版です。Ubuntuにデフォルトで用意されているaptパッケージマネージャーを使ってインストールします。

MinGW

mingw-w64をインストールするには、ターミナルに次のように入力して、エンターキーを押します。

sudo apt install mingw-w64

インストールが終わりましたら、次のコードをwindow.cという名前のファイルに保存してください。Windowsアプリケーションの場合、コメント以外の部分で日本語が含まれている場合は、Unicodeではなく、日本語(PC932)などのフォーマットで保存してください。

window.c


#include <windows.h>

    /*  メイン関数             */
int WINAPI WinMain      (HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR lpCmdLine,
                         int nCmdShow)
{

    /*  ローカル変数           */
    WNDCLASS wc;
    HWND hwnd;
    
    /*  WNDCLASSの作成        */
    wc.style         = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc   = DefWindowProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) (COLOR_APPWORKSPACE + 1);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = TEXT("MainWindow");
    
    /*  WNDCLASSの登録         */
    RegisterClass(&wc);
    
    /*  ウィンドウの作成        */
    hwnd = CreateWindow (TEXT("MainWindow"),
                         TEXT("メインウィンドウ"),
                         WS_OVERLAPPEDWINDOW,
                         CW_USEDEFAULT,
                         CW_USEDEFAULT,
                         CW_USEDEFAULT,
                         CW_USEDEFAULT,
                         NULL,
                         NULL,
                         hInstance,
                         NULL);
    
    /*  ウィンドウの表示        */
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);
    
    /*  メッセージボックス       */
    MessageBox          (hwnd,
			 TEXT("OKボタンをクリックすると、\nアプリケーションが終了します。"),
			 TEXT("はじめの一歩"),
			 MB_OK);
	
	/*  アプリケーションの終了     */
	return 0;
}
	

ソースコードをコンパイルするには、ターミナルで、window.cを保存したディレクトリに移動して、次のように入力してください。

x86_64-w64-mingw32-gcc window.c -o window

なお、次のコマンドで、C、C++、32bit、64bitをそれぞれコンパイルできます。

C、32bit
i686-w64-mingw32-gcc
C、64bit
x86_64-w64-mingw32-gcc
C++、32bit
i686-w64-mingw32-g++
C++、64bit
x86_64-w64-mingw32-g++

コンパイルはすぐに終わります。コンパイルが終わると同じディレクトリにwindow.exeというWindows実行ファイルが出来上がります。

重要

mingw-w64では、ストック(Stock)と呼ばれる、フォント、アイコン、グラフィックなどのオブジェクトにはアクセスできません。具体的には、コントロールとダイアログの章で使っているDEFAULT_GUI_FONTにはアクセスできずコンパイルできません。またグラフィックに関するものはほぼすべてがストックオブジェクトとなっているため、グラフィックの章のサンプルはコンパイルできません。

Wine Stable 5.0

UbuntuにWineをインストールするにはターミナルに次のように入力してエンターキーを押します。ディレクトリはどこで行っても構いません。

sudo apt install wine

先ほどコンパイルした window.exe を実行するには、ターミナルでwindow.exeを保存したディレクトリに移動して、次のように入力してエンターキーを押します。

wine window

実行結果



4154 visits
Posted: May. 16, 2020
Update: May. 18, 2020

ホーム   C/C++チュートリアル   目次