Out of Memory

ごめん、忘れてた。

目次

Blog 利用状況

ニュース

2008年7月1日
Microsoft MVP for Developer Tools - Visual C++ を再受賞しました。
2008年2月某日
MVPアワードがVisual C++に変更になりました。
2007年10月23日
blogタイトルを変更しました。
2007年7月1日
Microsoft MVP for Windows - SDKを受賞しました!
2007年6月20日
スキル「ニュース欄ハック」を覚えた!
2006年12月14日
記念すべき初エントリ
2006年12月3日
わんくま同盟に加盟しました。

カレンダー

中の人

aetos

顔写真

埼玉を馬鹿にする奴は俺が許さん。

基本的に知ったかぶり。興味を持った技術に手を出して、ちょっと齧りはするものの、それを応用して何か形にするまでは及ばずに飽きて放り出す人。

Microsoft MVP for Windows SDK July 2007 - February 2008, Microsoft MVP for Visual C++ February 2008 - June 2009
Microsoft MVP for Windows SDK
July 2007 - February 2008
Microsoft MVP for Visual C++
February 2008 - June 2009

アクセサリ

あわせて読みたい

e-Words

アフィリエイト

記事カテゴリ

書庫

日記カテゴリ

VC++での、リンカオプションの自動設定

例えば、#define _WIN32_WINNT 0x0600 とします。
これは、Windows Vista 以降で実装された機能を使うことの宣言であって、できたプログラムは Vista 以降でしか動かなくなります。
この宣言をしたにもかかわらず、Vista 以降固有の機能を使っていない場合、動くこともありますが、動かないものと思っておくべきです。

で、WinMain あたりで VerifyVersionInfo で Vista 以降かどうか判定して蹴るという方法もあるのですが、もっと楽な手もあります。
それは、リンカオプションの /SUBSYSTEM を利用するというものです。
例えばこれを /SUBSYSTEM:WINDOWS,6.0 とすると、Windows 5.x では、実行しようとしたときに「有効な Win32 イメージではありません」と怒られます。

んで、ちょっと前に挑戦して、うまく行かなかったこと。
WINVER や _WIN32_WINNT シンボルの値に応じて、リンカオプションを自動的に指定できないものかと思うわけです。
コードからリンカオプションを指定するには、#pragma comment( linker, "/SUBSYSTEM:WINDOWS,6.0" ) とやればいいはずです。
この "6.0" の部分を、プリプロセッサシンボルから自動生成できないかなーというわけなのですが。

どなたかご存知ありません?

投稿日時 : 2008年3月24日 16:56

Feedback

# re: VC++での、リンカオプションの自動設定 2008/03/24 17:19 とっちゃん

WINVER から展開ってちょっと難しそうな気がするなぁ...

今のところは、シンボル定義していくしかないんじゃないかなぁ?
どちらにしても、自分で定義が、WINVER とかの在り方だし...w
#デフォルトで 0x0600 もどうかとは思うけどさw

# re: VC++での、リンカオプションの自動設定 2008/03/24 18:46 スーパーあんどちん

することはWINVERから文字列を作るプリプリプロセッサを作ってコンパイル時にプリプロセッサの前に走らせる。

# re: VC++での、リンカオプションの自動設定 2008/03/25 13:35 melt

つ[Boost.Wave]

タイトル  
名前  
Url
コメント