コンテンツ

Activity

リンク

.NET FrameworkSDK C/C++コンパイラを使う

2003/12/11

.NET FrameworkSDKにはC#コンパイラだけが入ってるのではありません。VCのコンパイラとリンカが入っておりManagedでないC++の開発も可能です。

インストール

FrameworkSDKはNT 4.0以降のNT系のみで開発可能というカッコいい仕様となってます現時点でBCC Developerのようなフリーの統合開発環境はないみたいです。

入手方法はダウンロードか雑誌のCD-ROM等で。ナローな環境の場合ダウンロードは無理です。雑誌を探しましょう。

後で入れると挙動がおかしくなるためインストール前にIISを入れます。(XPHome除く)アプリケーションの追加と削除→Windowsコーポネントの追加と削除からインストールします。ちなみに今回使うManagedでないC++ではIISは使いません。

MDAC(Microsoft Data Access Components)をインストールします。これも使いませんけど。

.NET FrameworkSDKをインストールします。SDKサンプルは必要ありませんが環境変数の登録は行ったほうが良いです。(1.0)1.1ではインストーラが行ってくれないので自分で入れないといけません。

LIB/INCLUDEはコンパイラ、リンカのオプションに適切なパスを与えることで環境変数に登録しなくても動作します。(VCのIDEはこのような実装の模様)

名前場所
INCLUDE.../vc/include
LIB.../vc/lib
PATH.../vc/bin ただしIDEディレクトリも環境変数に登録するか、必要なDllをコピーすること。

マニュアルとかヘッダとか

インストール後スタートアップに追加されるドキュメントは.NETのものであり、Win32ネイティブな情報は記載されていません。C/C++コンパイラは..\Program Files\Microsoft Visual Studio .NET\Vc7\binにあります。とくにドキュメントはありません。使い方は各exeの/?オプションで調べることができます。

標準で添付されているのはC標準ライブラリだけです。MFCやSTL等のクラスライブラリ、Win32SDKはついてません。

へろ〜わ〜るど


#include <stdio.h>

int main()
{
    printf("普通間違えないから「電波」っていうんですよ♪\n");
    return 0;
}

適当に拡張子がcのファイルを作り(便宜上denpa.c)↑のコードをコピペ。
denpa.cをコンパイラでコンパイルします。SDKのそれはコマンドラインコンパイラなのでプロンプトから呼ぶことになります。BCCを使ってる人は簡単ですね。


D:\enpa>cl denpa.c

これでdenpa.exeができます。これはコンソールアプリケーションなので使用する際はプロントからdenpa.exeをよびます。(別にエクスプローラからでもいいですけど一瞬で消えるので)


D:\enpa>denpa
普通間違えないから「電波」っていうんですよ♪

D:\enpa>

Win32の開発

Win32 APIを利用したWin32アプリケーションの開発は標準の状態出来ません。Platform SDKが必要です。これらはPlatform SDK Updateからダウンロードでますが100Mを超えるのでナローな環境では無理です。

Webから直接インストールできますが不安なので私は全て落としました、よってそちらの方法。上のメニューでDownloads→FullDownloadを選択します。横のほうに多量のリンクがあるのでそれらのファイルを同じフォルダにダウンロードします。仮にC:\psdk\tempfileとします。

ダウンロードが終了後 psdk-full.bat のコマンドに解凍先フォルダを指定して実行すると勝手に解凍してくれます。分からない人は下を[適当な名前].batで保存してダブルクリックしてください。上のとおりのフォルダ構成ならc:\psdkに解答され勝手にブラウザが立ち上がるはずです。なおインストールには1.4GBの空き領域が必要です。


@rem 解凍バッチファイル

cd c:\psdk\tempfile
c:\psdk\tempfile> psdk-full c:\psdk
cd ..
setup.exe

インストールはsetup.exeを起動します。これを起動するとブラウザが立ち上がりますがこれがインストーラになっていますのでそのまま進めてください。間違ってもsetupフォルダ内を弄らないように、後で困ります。さてブラウザには先ほどのダウンロード元と同じような構成となっていますが上メニューからDownloads→Installを選択します。***SDKと並んだ画面に切り替わると思います。色々説明がありますが、分からなければWindowsSDKを選択して一括でインストールしてください。

デフォルトがc:\Program Files\MaicrosoftSDKとなっていると思いますのでそれを想定して話を進めます。大量にファイルが作成されていますが無視してbin,include,libフォルダをMicrosoft Visual Studio .NET\Vc7以下にコピーします。これでインストールは完了。

Win32のコンパイル

なにはともあれちゃんと作成できるか確認してみましょう。


#include<windows.h>

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wprm, LPARAM lprm) {

    switch( msg ) {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    case WM_PAINT:
        {
            HDC         hdc;
            RECT        rc;
            PAINTSTRUCT ps;
            hdc = BeginPaint(hwnd, &ps);
            GetClientRect(hwnd, &rc);
            DrawText(hdc,
                TEXT("普通間違えないから「電波」っていうんですよ♪"),
                -1, &rc ,
                DT_CENTER | DT_WORDBREAK );
            EndPaint(hwnd, &ps);
        }
        return 0;
    }
    return DefWindowProc(hwnd, msg, wprm, lprm);
}

int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
        PSTR pCmdLine , int nCmdShow ) {
    HWND hwnd;
    WNDCLASS wcl;
    MSG msg;

    wcl.style           = CS_HREDRAW |  CS_VREDRAW;
    wcl.lpfnWndProc     = WndProc;
    wcl.cbClsExtra      = 0;
    wcl.cbWndExtra      = 0;
    wcl.hInstance       = hInstance;
    wcl.hIcon           = LoadIcon(0, IDI_APPLICATION);
    wcl.hCursor         = LoadCursor(0, IDC_ARROW);
    wcl.hbrBackground   = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wcl.lpszMenuName    = 0;
    wcl.lpszClassName   = TEXT("denpa");
    if ( !RegisterClass(&wcl) ) return 0;

    hwnd = CreateWindow(
            TEXT("denpa"),
            TEXT("普通間違えないから「電波」っていうんですよ♪") ,
            WS_OVERLAPPEDWINDOW | WS_VISIBLE,
            CW_USEDEFAULT, CW_USEDEFAULT,
            CW_USEDEFAULT, CW_USEDEFAULT,
            0, 0, hInstance, 0
    );
    if( hwnd == 0 ) return 0;

    while( GetMessage(&msg, 0 ,0, 0) ) {
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

これを適当なファイル名(ここではwindenpa.c)で保存しコンパイル+リンクします。VCにはBCCでいうところのimport32.libが無いため各libをそれぞれ入力しなければなりません。上の場合(ファイルはwindenpa.c)user32.dllとgdi32.dllを使っているので対応するlibファイルを指定します。


D:\enpa>cl windenpa.c user32.lib gdi32.lib

これでwindenpa.exeができました。

履歴

2003/12/11
あずまや。移動に伴い全面的に書き換え。
2003/8/28
誤記修正
2003/3/26
初出

goto Top

Copyright(C)方位記号

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル