C++の最近のブログ記事

MIDL: defaultvalue

| | コメント(0)
今日は、IDLのdefaultvalueについて苦言を書こう。

x64 ABI での可変引数

| | コメント(0)

以前にも書いたが、
Windows x64での呼び出し規約は、fastcallだけになった。
__stdcallが設定されていようが無視されます。

VC2008 Feature Pack Beta

| | コメント(3)

Visual C++ 2008 Feature Pack Betaをインストールしてみた。

MFCの変わりようはすごいものです。

Single Document/Multiple Documentsのアプリケーションタイプでは、
プロジェクトウィザードが完了した段階で、Visual StudioやOffice 2007とそっくりなプロジェクトが生成されています。
ウィザードだけで楽しめます。

ただし、Dialog basedのアプリケーションタイプだと、これまでと同じレベルで、Visual Styleを使えません。

いくらMFCでRibbonに対応しても、UIライセンスは別途取得しないといけないようです。

MFCがこのように拡張されると、WinFormsなんとかしてくれよ、と思うのはオイラだけでしょうか?
もちろん、WPFでいいんですが。


regexなどTR1の一部が提供されるのも大きな目玉です。
Boost C++を入れる必要もなくなります。


大幅に拡張され、ファイルサイズも全然違うのですが、DLLのファイル名は、xxx90.dllとなっています。
いくらSxSがあるとはいえ、それはないでしょ...。


ところで、これ、いつリリースされるの?

ATL Wizard

| | コメント(2)

ATLのウィザードで、COMクラスを作成する場合、
MemoryStreamとか、FileStreamとか、予約済みと言われます。
気持ちはわかるんだけど、アセンブリ・ローカル名なcoclass名になるわけだし、そもそも、COMに文字列の名前はあまり関係ないんだし、なぜ禁止するの?

それと、予約されている名前の一覧ってどこかにないの?

Visual C++ 2008 Feature Pack

| | コメント(0)

Visual C++ 2008 Feature Pack Betaがリリースされている。

Office Ribbon style interface
Office 2007, Office 2003 and Office XP look and feel
Modern Visual Studio-style docking toolbars and panes
Fully customizable toolbars and menus
A rich set of advanced GUI controls
Advanced MDI tabs and groups
And much more!

うぉぉ!!!!

Smart pointers
Regular expression parsing
New containers (tuple, array, unordered set, etc)
Sophisticated random number generators
Polymorphic function wrappers
Type traits
And more!

すげぇ。
けど、Standard C++ libraryって、小文字だし混在すると汚いんだよね。

対象は英語版のVisual Studio 2008のみです。

NOERRORかS_OKか

| | コメント(0)

HRESULTの成功では、S_OKを返す。これが決まりだ。
しかし、よくNOERRORを使っているのを見かける。MSのコードでも。
おそらく、歴史的なものだと思う。

けど、どっちがより正しいんだろう?

S_OK, NOERRORともに、WinError.hに定義されている。
そして、どちらもHRESULT value definitionsセクションに定義されている。

実際の定義はこのようになっている。
#define NOERROR 0
#define S_OK ((HRESULT)0L)

こうみると、S_OKはHRESULT型であるのに対して、NOERRORはint型ということになる。
そういうわけで、S_OKがより適切な書き方ということになる。

ふと感じた疑問でした。

C++ One-Time Initialization

| | コメント(0)
MSDNマガジンより。

よくシングルトンモデルを使う場合、以下のようなコードを書くことがある。
Logger* GetLogger()
{
    static Logger logger;
    return &logger;
}

COM Side-by-Side

| | コメント(0)
今更ながら、COMのSide-by-Sideをお勉強。

__m128型?

| | コメント(0)

MSDNライブラリに__m128という型を発見。何これ?

The __m128 data type, for use with the Streaming SIMD Extensions and Streaming SIMD Extensions 2 instructions intrinsics, is defined in xmmintrin.h.
A variable of type __m128 maps to the XMM[0-7] registers.

なるほど...

x64 union

| | コメント(0)
x64でのunionにちょっと気をつけたいことがあった。

union {
    char* p;
    short s;
    long l;
};

メンバーlのオフセットは、0でなく4になるそうだ。
つまり、メンバーの前にパディングされる。
これって、言語的にOKなの?

追記)
MSDNライブラリの間違いだと思います。
実験したらオフセットは0でした。