darksky Blog

darksky のいたずら書き

AILight Blogs
投稿数 - 28, コメント - 81, 記事 - 0, トラックバック - 0

2004年7月16日

VS.NET2003 ATLプロジェクトに戸惑う

開発環境の移行も兼ねて、VS.NET 2003でATLを使ったプログラムを書いてみました。
CStringがテンプレートでサポートされたということを聞いたので、MFCを使わなくてもCStringが使えるのは嬉しいです。

早速、テスト用のATLプロジェクトを作って、ATLオブジェクトを追加してみるとIDLファイルが見当たらない。
なぁんと、属性なんて機能がサポートされていて、.hファイルに以下のような記述があります。

// IITestObject
[
 object,
 uuid("ADCC4CC3-B2E2-4D7E-BF17-C62D65E87188"),
 dual, helpstring("IITestObject インターフェイス"),
 pointer_default(unique)
]
__interface IITestObject : IDispatch
{
};

// CITestObject
[
 coclass,
 threading("apartment"),
 vi_progid("xxxText.ITestObject"),
 progid("xxxText.ITestObject.1"),
 version(1.0),
 uuid("1BE1910F-0893-4936-B87F-B064E515D3E4"),
 helpstring("ITestObject Class")
]

rgsファイルの内容もかなりシンプルになっていて、こんな感じ。

HKCR
{
 NoRemove AppID
 {
  '%APPID%' = s 'xxxText'
  'xxxText.DLL'
  {
   val AppID = s '%APPID%'
  }
 }
}

早速、メソッドを追加してCStringがMFCなしで使えるのかを確認するとOKでした。
しかし、便利な属性機能ですが今までの表記がいいので、別のプロジェクトを作りました。
その時に属性オプションのチェックを外すと、以前のようにIDLファイルも作成されます。
こっちの方がわかりやすくていいなぁと思って、作業を進めていくとCStringを使っている箇所でコンパイルエラーが発生!!
必要なヘッダファイルとかをincludeしてもダメ。
詳しくは見てませんが、属性をONにしていないとCStringが使えないようです。

プロジェクトの違いを比較してみると、プリプロセッサで_ATL_ATTRIBUTESが定義されています。
これを属性OFFで作ったプロジェクトに追加すると、ちゃんと動くではありませんか。
なんだこれ? こういうやり方でいいのかは不明ですが、一応CStringクラスが動くようにはなりました。

新しい環境に移行していくのって大変だなぁ。

posted @ 15:50 | Feedback (1)