桜、抹茶、白、日記

名古屋市在住のC++使いのcoderの日記だったもの。

VC++8.0以降でOLEオートメーション

d:id:youandi:20080226:p1
最近2007OfficeをメインPCにインストールしてしまったのですが、VC++7.1までととVC++8.0以降とで、WordやExcelのOLEオートメーションのラッパークラスの生成結果が違う・・・。
VC++8.0以降だと「#import "C:\\〜"」な宣言が追加されていてそれが原因でビルドがエラーになる。

How to automate embedded Office ActiveX documents with C++
http://support.microsoft.com/kb/316587/en

サポート情報を検索した所、単純に「#import "C:\\〜"」の行をコメントアウトすれば良いみたい。
とりあえず、ビルドがエラーになるのは解決したのですが、プログラムを終了してもOLEオートメーションで起動したWord(winword.exe)がメモリ上に残りっぱになる症状が。Excelの場合は同じ実装で問題ないのですが・・・。
そういえば、この辺の情報を調べるのにMSのサポート情報しか検索していなかったな。

  • 追記1

コメントアウトではなく、importディレクティブの属性を変更してもビルドは通った。

#import "libid:{2df8d04c-5bfa-101b-bde5-00aa0044de52}"  auto_rename   // mso.dll
#import "libid:{0002e157-0000-0000-c000-000000000046}"  auto_rename   // vb6ext.olb
//#import "libid:{00020813-0000-0000-c000-000000000046}"  auto_rename   // excel.exe
#import "libid:{00020905-0000-0000-C000-000000000046}"  auto_rename   // winword.exe

上記の宣言を入れて、

#import "C:\\Program Files\\Microsoft Office\\Office12\\MSWORD.OLB" no_namespace // 変更後
#import "C:\\Program Files\\Microsoft Office\\Office12\\MSWORD.OLB" auto_rename  // 変更前