From: arton Date: 2000-07-29T17:30:09+09:00 Subject: [ruby-list:24043] Re: win32ole artonです。 diff win32oleold.c win32ole.c 300c300 < pw = SysAllocStringLen(NULL, size); --- > pw = SysAllocStringLen(NULL, size - 1); 直前のMultiByteToWideCharはNULLを含んだ値を返送。 SysAllocStringLenは、渡された数にNULL分の1を追加。 ということのようです。 MultiByteToWideCharは、日本語のリファレンスが腐っていて、-1を指定した場 合はNULL付きで処理を行って、1以上を指定した場合はNULLなしとみなすので、 間違いやすいですね。 Koji Arai wrote: > > 新井です。 > snip > ところで、2つめの質問です。 > > #!/usr/local/bin/ruby -Ks # -*- Coding: sjis-dos -*- > > require 'win32ole' > > word = WIN32OLE.new('Word.Application') > word.visible = true > doc = word.Documents.Add > doc.Activate > p doc.name > word.Selection.InsertBefore("テスト") > # doc.Close > # word.Quit > > を実行すると、Wordに > > テスト□ > > などと出力されます。最後の"□"(実際は小さい四角、なにかよく > わからないコードです)がなぜでてくるのかわからないんですがな > んでしょこれ。VBで単純に Selection.InsertBefore("テスト") し > てもこうはなりません。 > > 仕方ないので > > word.Selection.InsertBefore("テスト") > word.Selection.Collapse WdCollapseEnd > word.Selection.Delete WdCharacter, -1 > > などとして凌いでます(これで定数が必要だったわけでした)。 > > Windows98 Second Edition 4.10.2222 A で、 > Word 97 です。 > > よろしくお願いします。 > > -- > 新井康司 (Koji Arai)