C++ でXLLアドインを作る with XLW−2〜サンプルソリューション解説とXLLのデバッグ方法〜

前回の記事(C++ でXLLアドインを作る with XLW−1〜インストールからサンプルソリューション実行まで〜 - My Life as a Mock Quant)の続き。前回でXLWのインストールからサンプルソリューションを実際に動かす方法までを示したので、今回は「サンプルソリューションの中で何をやってるのか?」という点をざっくりと解説&XLLのデバッグ方法について書きます。環境は前回同様visual studio express edition 2008のC++

サンプルソリューションのざっくり解説

xlwTemplateExtractor.exeで作成したひな形のソリューションを立ち上げると2つのプロジェクトがあると思いますが、それぞれ

  • RunInterfaceGenerator:Excelから呼ばれるインターフェイスを自動生成するためのプロジェクト
  • XLL:実際の関数の動作を規定するプロジェクト

という意味合いです。以下、その2つについて説明します。

RunInterfaceGeneratorプロジェクト

上述のようにXLLで作成した関数からインターフェイスを自動生成するためのプロジェクトなので、簡単なXLLを作るぐらいならこちらのプロジェクトには手をいれなくてOKです。プロジェクトの中には1つのメイクファイル(RunInterfaceGenerator.nmake)があり、その中をのぞいてみると

IFACE_EXE="$(XLW)\xlw\build\$(VC)\$(ENVIRON)\InterfaceGenerator.exe"
IFACE_INPUT=source\cppinterface.h
IFACE_OUTPUT=source\xlwWrapper.cpp

という3つの変数があるのがわかりまして、要するにここではIFACE_EXEにIFACE_INPUTファイルを食わせてIFACE_OUTPUTを吐き出させるということを行っています。ここでIFACE_INPUTはXLLプロジェクトで開発者が作成したExcelから使いたい関数に対応していて、IFACE_OUTPUTはそれに対応したソースコードを吐いてくれるという枠組みになっています。

XLLプロジェクト

3つのフォルダ

  • AutoGeneratedSource
  • Header Files
  • Source Files

に別れて構成されているプロジェクトで、実際に手を入れなければならないのは「Header Files」「Source Files」の2つです。「AutoGeneratedSource」フォルダにあるxlwWrapper.cppはRunInterfaceGeneratorプロジェクトにより自動生成されるものです。なので、開発者が実際にXLLを作成しようとするときには

  1. 「Header Files」に関数の宣言を作成する
  2. 「Source Files」に関数の定義を作成する

のような手順でXLLを構築していくことになります。

作成したXLLのデバッグ方法*1

これから自作関数をガシガシ書いていくことになるかと思うのですが、それをどのようにデバッグするのかを示します。まず、ソリューションエクスプローラーから

  • 【XLLプロジェクト】⇒【プロパティ】⇒【構成プロパティ】⇒【デバッグ

と辿っていきます。そして、【コマンド】と書いてある所にExcel.exeへのフルパスを入力します*2

そして、次にソリューションエクスプローラーから

  • 【ソリューション】⇒【プロパティ】⇒【スタートアッププロジェクト】

と辿っていきます。そして、【シングル スタートアップ プロジェクト】となっているコンボボックスをXLLにします。

この状態で【デバッグ開始(F5)】を実行すると

のような警告が出るけど「はい」を選択して無視してOK*3。起動したExcelにTemplate.xllをドラッグ&ドロップなりで追加します。この時「アドインは有効にする」を選択。次にデバッグしたい関数にブレークポイントを張ります。今回はサンプルソリューションに元からあるEchoShort関数にブレイクポイントを張りたいので、XLLプロジェクトの「Source Files」にあるsource.cppを開いて下図のようにブレイクポイントを張ります。

この状態になったらExcelの側に戻ってEchoShort関数を

のように呼び出してEnterキーを押すと・・・

というようにVC++の方にフォーカスが当たってデバッグが可能です。あとはコツコツとデバッグをしていくということですね、はい。

続きはこちら「C++ でXLLアドインを作る with XLW−3〜関数作成&XLWについて〜 - My Life as a Mock Quant

*1:ちなみにXLLではなくDLLも同じようにデバッグ可能

*2:画面はExcel 2007のインストール先のもの

*3:http://blogs.msdn.com/b/vstipsjpn/archive/2009/06/22/9392775.aspx にこの警告の消し方が載ってる。シンボル情報についてはhttp://oshiete.goo.ne.jp/qa/1619043.htmlがわかりやすい