Perl,Ruby,PythonでCOMの引数に配列を指定する
2014-10-22


COMの引数に配列を指定する方法を調べていたところ、日本語の情報があまり多くはないように感じたので、自分自身のメモ代わりにも書いておきます。
私が使っているCOMは、パンローリング株式会社の提供している'Pan Active Market Database'(http://www.panrolling.com/pansoft/amarket/)というものです。
宣伝ではないので、製品の詳しい説明はしません。興味のある方はサイトを覗いてみてください。

例として取り上げるクラス、メソッドは次のとおりです。
この例では、配列に値をセットしてCOMに渡すのではなく、COMの側で配列を初期化して値をセットして戻してきます。
ProgIDは、'ActiveMarket.Names.1'です。
Names(名前)クラス --> 銘柄コードと銘柄名との対応を保持するクラス
AllNamesメソッド --> 種類を指定して、銘柄コードと銘柄名の一覧を取得するメソッド

 形式
Sub AllNames(ByVal Kind As KindFlag, Codes() As String, Names() As String)
Enum KindFlag
AM_KINDFLAG_SPOTS = 1
AM_KINDFLAG_FUTURES = 2
AM_KINDFLAG_ALL = 3
End Enum

 引数
Kind 入力 取得する種類 (AM_KINDFLAG_SPOTS: 現物、AM_KINDFLAG_FUTURES: 先物、AM_KINDFLAG_ALL: すべて)
Codes 出力 銘柄コードの一覧
Names 出力 銘柄名の一覧

 戻り値 ナシ

マニュアルではVB6のコードで説明されていますが、実装がVB6かどうかは分かりません。

Perlの場合
 1 use strict;
 2 use warnings;
 3 use Win32::OLE;
 4 use Win32::OLE::Variant;
 5 use 5.010;
 6 my $nm = Win32::OLE->new('ActiveMarket.Names.1');
 7 my $v1 = Variant(VT_ARRAY|VT_BSTR|VT_BYREF, [1,2], 1);
 8 my $v2 = Variant(VT_ARRAY|VT_BSTR|VT_BYREF, [1,2], 1);
 9 $nm->AllNames(3, $v1, $v2);
10 my @codes = $v1->Dim();
11 my @names = $v2->Dim();
12 my 

続きを読む

[Perl]
[Python]
[Ruby]

コメント(全0件)


記事を書く
powered by ASAHIネット