Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ole フィルタのマージ



# namazu-devel-ja に振っています。

OLE フィルタの二重流通状態は何かとややこしいので、竹迫さんの OLE 
フィルタは、CVS リポジトリに完全にマージしちゃう方がいいとおもうん
ですがいかがでしょうか。とくに oleexcel.pl は、竹迫さんバージョン
に置き換えてしまいましょう。動作実績もできてきたし。

それから、olemsword.pl で Word をいちいち終らない方法ですが、以下
の差分で動くようです。つまり new のときに destructor を定義しない
だけでいけるようです。試してみていただけませんでしょうか。これでだ
いぶ速くなっているようにおもいます。

しかしこの方法でも、olepowerpoint.pl だと、

| Win32::OLE(0.15) error 0x800706ba: "RPC サーバーは使えません。"
|     in METHOD/PROPERTYGET "Presentations" at /namazu/share/namazu/filter/win32/olepowerpoint.pl line 182

になって、どうもうまくいかないですね。
--
馬場  肇 ( Hajime BABA )            E-mail: baba@xxxxxxxxxxxxxxxxxxxxxx
京都大学理学部宇宙物理学教室 博士後期課程
--



--- olemsword.pl	Mon Jan 22 06:33:58 2001
+++ olemsword.pl.nonstop	Thu Jan 25 01:22:39 2001
@@ -151,16 +151,16 @@
 
 package ReadMSWord;
 
+my $word;
 sub ReadMSWord ($$$) {
     my ($cfile, $cont, $fields) = @_;
 
     # Copy From Win32::OLE Example Program
     # use existing instance if Word is already running
-    my $word;
     eval {$word = Win32::OLE->GetActiveObject('Word.Application')};
     die "MSWord not installed" if $@;
     unless (defined $word) {
-	$word = Win32::OLE->new('Word.Application', sub {$_[0]->Quit(0);})
+	$word = Win32::OLE->new('Word.Application')
 	    or die "Oops, cannot start Word";
     }
     # End of Copy From Win32::OLE Example Program
@@ -193,9 +193,16 @@
 
     $doc->close(0);
     undef $doc;
-    undef $word;
 
     return undef;
+}
+
+END {
+    if (defined $word) {
+	util::vprint("Word->Quit\n");
+	$word->Quit;
+	undef $word;
+    }
 }
 
 sub getParagraphs ($$) {