ティッカー更新用のCOMインターフェイスを備えたリアルタイムデータサーバー(取引端末)を使用しています。Excelから、これを使用してティッカー更新をサブスクライブできます-
RTD(progId,,topic1,topic2, ...)
ExcelまたはそのAPIに依存せずに、これらのティッカー更新を受信するアプリケーションを構築しようとしています。私はMSテクノロジの経験がないJava開発者ですが、これをC#で試してみようと思いました。
このTypeLibを掘り下げるためにOleViewを使用しました
// TLib : // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
importlib("stdole2.tlb");
// Forward declare all types defined in this typelib
interface IScripRTD;
interface IRTDUpdateEvent;
[
uuid(A04A3240-D051-4B4C-B004-CA92151F11E5),
helpstring("ScripRTD Class")
]
coclass ScripRTD {
[default] interface IScripRTD;
};
[
odl,
uuid(EC0E6191-DB51-11D3-8F3E-00C04F3651B8),
helpstring("IScripRTD Interface"),
dual,
nonextensible,
oleautomation
]
interface IScripRTD : IDispatch {
[id(0x0000000a)]
HRESULT ServerStart(
[in] IRTDUpdateEvent* callback,
[out, retval] long* result);
[id(0x0000000b)]
HRESULT ConnectData(
[in] long topicId,
[in] SAFEARRAY(VARIANT)* strings,
[in, out] VARIANT_BOOL* newValues,
[out, retval] VARIANT* values);
[id(0x0000000c)]
HRESULT RefreshData(
[in, out] long* topicCount,
[out, retval] SAFEARRAY(VARIANT)* data);
[id(0x0000000d)]
HRESULT DisconnectData([in] long topicId);
[id(0x0000000e)]
HRESULT Heartbeat([out, retval] long* result);
[id(0x0000000f)]
HRESULT ServerTerminate();
};
[
odl,
uuid(A43788C1-D91B-11D3-8F39-00C04F3651B8),
dual,
oleautomation
]
interface IRTDUpdateEvent : IDispatch {
[id(0x0000000a)]
HRESULT UpdateNotify();
[id(0x0000000b), propget]
HRESULT HeartbeatInterval([out, retval] long* value);
[id(0x0000000b), propput]
HRESULT HeartbeatInterval([in] long value);
[id(0x0000000c)]
HRESULT Disconnect();
};
この例に出くわしましたが、TlbImpを使用してC#インターフェイスを自動生成することについての部分は私にはわかりません。誰かがこのインターフェースをインスタンス化し、コールバックを登録してティッカーの更新を取得する方法のより良い例を提供できますか?
ちなみに、私は探しているものに近い簡単なAHKスクリプトを作成することができました-
get_price(symbol)
{
comObj := ComObjCreate(progId)
num := ComObjParameter(3, 5)
update := ComObjParameter(0xB, -1)
arr := ComObjArray(VT_VARIANT:=12, 3)
arr[0] := "MktWatch"
arr[1] := symbol
arr[2] := "Last Traded Price"
price := comObj.ConnectData(num, arr, update )
return price
}
これはコールバックを登録しませんが、これをタイマーで実行すると、個々のシンボルのティッカー更新を取得できます。
違いが生じる場合は、Win7x64を使用しています。
COMインターフェイスを宣言する代わりにリフレクションを使用しているように見えるこの例を見てきましたが、動作させることができませんでした。