参考にしたサイト
- COMの基礎 〜 HSPの裏技?? 番外編 〜 HSPからのCOM操作
- C言語でCOMクライアント 温COM知新 (おんこむちしん)
ProgID とは--> "ADODB.Connection","ADODB.Recordset" : CLSIDを参照する文字
CLSID とは--> COMコンポーネントの識別子(GUID)
GUID : {00000514-0000-0010-8000-00AA006D2EA4} PROGID : ADODB.Connection.2.8
GUID : {00000535-0000-0010-8000-00AA006D2EA4} PROGID : ADODB.Recordset.2.8
IID とは--> COMコンポーネントが持っているインターフェースの識別子(GUID)
インターフェース とは--> COMコンポーネントのメソッドへのポインタのテーブル
*Rubyに付属の Win32OLE View で調べたもの Class Connection GUID : {00000514-0000-0010-8000-00AA006D2EA4} PROGID : ADODB.Connection.2.8 DESCRIPTION : FUNC VOID Close Dispatch ID : 5 DESCRIPTION : FUNC _Recordset Execute Dispatch ID : 6 DESCRIPTION : arg1 - BSTR CommandText [IN] arg2 - VARIANT RecordsAffected [OUT,OPTION] arg3 - I4 Options [IN,OPTION] = -1 FUNC VOID Open Dispatch ID : 10 DESCRIPTION : arg1 - BSTR ConnectionString [IN,OPTION] = arg2 - BSTR UserID [IN,OPTION] = arg3 - BSTR Password [IN,OPTION] = arg4 - I4 Options [IN,OPTION] = -1 FUNC UI4 Release Dispatch ID : 1610612738 DESCRIPTION :
タイプライブラリ とは --> VBからCOMオブジェクトへアクセスするための「インターフェイス」が格納されているライブラリ。
GUID 構造体 (CLSID も IID も、形は同じ構造体。型の別名として定義されている。)
typedef struct _GUID { DWORD Data1; // 4バイト WORD Data2; // 2バイト WORD Data3; // 2バイト BYTE Data4[8]; // 1バイト×8 } GUID; typedef GUID CLSID; typedef GUID IID;
Haskell で接続する様子。
Main> :m + System.Win32.Com Main> :m + System.Win32.Com.Automation Main> clsidFromProgID "ADODB.Connection" {00000514-0000-0010-8000-00AA006D2EA4} Main> clsidFromProgID "ADODB.Recordset" {00000535-0000-0010-8000-00AA006D2EA4} Main> let iidIDispatch_unsafe = mkIID "{00020400-0000-0000-C000-000000000046}" Main> iidIDispatch_unsafe {00020400-0000-0000-C000-000000000046} Main> coCreateObject "ADODB.Connection" iidIDispatch_unsafe "<interface pointer = "0x03c00e90">" Main> coCreateObject "ADODB.Recordset" iidIDispatch_unsafe "<interface pointer = "0x03c06bf0">"