参考にしたサイト
- 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.8IID とは--> 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">"