開発環境 Microsoft Visual C++ 2010 Express (SP1)
実行環境 Microsoft Windows XP Home Edition (SP3)
プロジェクトの種類 Win32 プロジェクト
プロジェクト名 wtlhello
アプリケーションの種類 Windows アプリケーション
追加のオプション 空のプロジェクト

以下のATL/WTLを使用。
  • Windows Driver Kit Version 7.1.0
  • WTL 8.1.12085

リンカーのwarningの意味は「異なる属性の複数のセクションがマージされている」という事らしい。
リンカーオプションの/verboseや/mapを指定して調べてみたがよく分からない。
とりあえずwarningを抑止する事にした。

参考

wtlhello.cpp
/*
ATL/WTLディレクトリの追加
構成プロパティ/VC++ ディレクトリ
・インクルード ディレクトリ:C:\etc\wtl81_12085\Include;C:\WinDDK\7600.16385.1\inc\atl71
・ライブラリ ディレクトリ:C:\WinDDK\7600.16385.1\lib\ATL\i386
 
構成プロパティ/リンカー/コマンド ライン
・追加オプション:/ignore:4078,4254
*/
#pragma comment(lib, "atlthunk.lib")
 
#include <Windows.h>
// ATLヘッダ
#define _ATL_NO_AUTOMATIC_NAMESPACE
#include <atlbase.h>
#include <atlwin.h>
// WTLヘッダ
#define _WTL_NO_AUTOMATIC_NAMESPACE
#include <atlapp.h>
#include <atlcrack.h>
 
class HelloWindow : public ATL::CWindowImpl<HelloWindow>
{
public:
	// ウィンドウクラス名を登録
	DECLARE_WND_CLASS(TEXT("HelloWindow"));
 
private:
	// メッセージマップ
	BEGIN_MSG_MAP(HelloWindow)
		MSG_WM_PAINT(OnPaint)
		MSG_WM_DESTROY(OnDestroy)
	END_MSG_MAP()
 
	// 描画メッセージ
	void OnPaint(HDC)
	{
		WTL::CPaintDC dc(m_hWnd);
		dc.TextOut(10, 10, TEXT("Hello, world"), -1);
	}
 
	// ウィンドウが破棄されるメッセージ
	void OnDestroy()
	{
		PostQuitMessage(0);
	}
};
 
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int nCmdShow)
{
	// ウィンドウのインスタンスを生成
	HelloWindow wnd;
	HWND hWnd = wnd.Create(NULL, ATL::CWindow::rcDefault,
		TEXT("Hello, world"), WS_OVERLAPPEDWINDOW);
	if (!hWnd) {
		return -1;
	}
 
	// ウィンドウ表示
	wnd.ShowWindow(nCmdShow);
	wnd.UpdateWindow();
 
	// メッセージループ
	WTL::CMessageLoop msgLoop;
	return msgLoop.Run();
}
 
最終更新:2012年09月21日 16:33