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 // 変更前
- 追記2
- d:id:youandi:20100223:p1 別エントリに記載