C#で実装したコードをVBSから使う際の注意点
次の点に注意しなければならない。

Uint、ULONG等のUnsignedの変数は利用できない。

VBAやVBSはUnsignedをサポートしていないので、ULONGなどのインターフェイスは使用できない。


作成したCOMのCPUにあわせて実行するCScriptを切り替える必要がある。
64ビットマシンにはVBScriptを動かすCScriptが二種類存在する。
32ビット用のものはC:\Windows\syswon64\cscript である。
64ビット用のものはC:\Windows\System32\Cscript である。
もし、作成したCOMと実行するCScriptのプロセスのビットが異なる場合、登録したはずのCOMが見つけられず下記のエラーが発生する

C:\dev\NMeCabCom\bin\sample.vbs(6, 1) Microsoft VBScript 実行時エラー: ActiveX コンポーネントはオブジェクトを作成できません。: 'NMeCabCom.NmcTagger'

オブジェクトの配列は返せない

以下のようなCOMのインターフェイスがあったとする。

    public interface INmcTagger
    {
        string GetModulePath();
        void Create(NmcParam p);
        NmcNode[] Parse(string text);
    }

これはVBAやC#などの型を明示できる言語では適切に処理できる。
Dim ret As NmcNode()
ret = t.Parse("This is a pen.")
しかし、VBSの場合、型が明示できないため、Unknownとなり処理できなくなる。
Dim ret ' As NmcNode()
ret = t.Parse("This is a pen.")
WScript.Echo TypeName(ret) ' Unknownとなり、以降処理できない。
こういう場合は、配列を管理するクラスを作成してそれを利用する
    public interface INmcNodeCollection
    {
        int Count { get; }
        NmcNode GetItem(int index);
    }
配列ではないオブジェクトを返した場合は、VBSでも処理ができる
set ret = t.Parse("This is a pen.")
For i = 0 To ret.Count- 1
  WScript.Echo TypeName(ret.GetItem(i))
  WScript.Echo ret.GetItem(i).Surface
Next




[PR]
by mima_ita | 2013-11-25 17:36 | .NET
<< NMecabを用いてVBAやW... C#で実装したコードをVBAと... >>



実験ですお
検索
カテゴリ
最新の記事
.NET4.5におけるasy..
at 2014-07-02 00:46
.NETでTwitterを検..
at 2014-06-29 00:49
Redmineのプラグインで..
at 2014-06-28 03:29
IO.popenのwrite..
at 2014-06-28 03:25
RedmineのWikiでU..
at 2014-06-28 03:16
以前の記事
最新のトラックバック
その他のジャンル
ブログパーツ