(under construction...)
アドレス帳連携用 COM インターフェイス
Mailist からアドレス帳連携するために必要な API は、以下のとおり。

BOOL CPconDoc::AddrConnInit(long lHwnd) 機能: db アクセス用モジュール初期化 引数: lHwnd データ変更通知メッセージを送るウィンドウのハンドル (*1) 返り値: TRUE (成功) FALSE (失敗) *1 現在未使用
long CPconDoc::AddrConnOpenDB(long lDbid) 機能: アドレス帳 db をオープン 引数: オープンする db の ID ただし -1 を指定した場合は起動対象(デフォルト)db 返り値: オープンした db の ID 失敗した場合は -1
BOOL CPconDoc::AddrConnCloseDB(long lDbid) 機能: 指定の db をクローズ 引数: lDbid dbID 返り値: TRUE (成功) FALSE (失敗)
BOOL CPconDoc::AddrConnEditTip(long lDbid, long lTipid) 機能: 外部アプリで指定データの編集画面を開く 引数: lDbid dbID lTipid tipID 返り値: TRUE (成功) FALSE (失敗)
long CPconDoc::AddrConnGetDBType() 機能: この com が扱う db の種類を返す 引数: なし 返り値: db の種類を示す数値。 1 Mailist アドレス db(将来使う?) 2 PowerPIMM
BOOL CPconDoc::AddrConnReadNextTipData(LPCTSTR pszMapName) 機能: オープン中の db からアドレスデータを1件づつ順に読む 引数: pszMapName 1件のアドレスデータを返すためのファイルマッピングの名前 返り値: TRUE (成功) FALSE (失敗 or 次のデータはなかった(最後まで読んだ)) #include "AdStruct.h" BOOL CPconDoc::AddrConnReadNextTipData(LPCTSTR pszMapName) { BOOL fRet = FALSE; HANDLE hMapAddr = CreateFileMapping((HANDLE)0xffffffff, NULL, PAGE_READWRITE, 0, sizeof(AddrStruct), pszMapName); AddrStruct* lpMapAddr = (AddrStruct*)MapViewOfFile(hMapAddr, FILE_MAP_WRITE, 0, 0, sizeof(AddrStruct)); /* ここで *lpMapAddr にデータをセット */ UnmapViewOfFile(hMapAddr); CloseHandle(hMapAddr); return fRet; }
long AddrConnRegister(LPCTSTR pszName, LPCTSTR pszAdrO, LPCTSTR pszTopFolder); 機能: 外部 db に新規データを登録 引数: pszName 名前 pszAdr0 メールアドレス pszTopFolder 最上位フォルダボックスのパス (*2) 返り値: 新規登録したデータの tipID 失敗した場合は -1 *2 Pcon ではデータベースの整合性を見るためのデータを残すために使用している。
long AddrConnGetDefaultDBid(); 機能: 起動対象(デフォルト)db の ID を返す 引数: なし 返り値: 起動対象(デフォルト)db の ID 失敗した場合は -1
BOOL AddrConnFindDBid(LPCTSTR pszMapName, BOOL fFirst); 機能: アドレス帳 db を順にさがす 引数: pszMapName db の名前とパスを返すためのファイルマッピングの名前 fFirst TRUE のときははじめからさがす 返り値: みつかった db の ID 次がみつからない場合は -1 #include "AdStruct.h" BOOL AddrConn::FindDBid(LPCTSTR pszMapName, BOOL fFirst) { long fRet = FALSE; HANDLE hMapDbLs = CreateFileMapping((HANDLE)0xffffffff, NULL, PAGE_READWRITE, 0, sizeof(DbListStruct), pszMapName); DbListStruct* lpMapDbLs = (DbListStruct*)MapViewOfFile(hMapDbLs, FILE_MAP_WRITE, 0, 0, sizeof(DbListStruct)); /* ここで */ CloseHandle(hMapDbLs); return fRet; }
long AddrConnCreateDB(LPCTSTR pszPath); 機能: アドレス帳 db を新規に作成 引数: 環境設定ファイルが置かれているフォルダのパス (*3) 返り値: 新規作成した db の ID 失敗した場合は -1 *3 Pcon では、新規データベースをこの下に作成している。
long AddrConnCheckDB(LPCTSTR pszDbPath, LPCTSTR pszTopFolderPath, BOOL fMode); 機能: アドレス帳 db の整合性をチェック 引数: pszDbPath, //データベースのパス pszTopFolderPath, //最上位フォルダのパス fMode //FALSE: チェックのみ、TRUE: チェック&更新 (*4) 返り値: 異常がみつかった場合は db の ID みつからない場合は -1 *4 Mailist では、起動時および環境切替え時に、この関数で db の整合性を チェックしている。チェックのための情報は AddrConnRegister() と AddrConnCheckDB() をとおるたびに更新されていくが、異常発見時に Mailist はアドレス情報のクリア処理を先延ばしにできるようにしたため 「異常があった」という情報をそのまま残したいときがあるのでこのフラグが ある。
BOOL AddrConnPutTip(long lDbid, long lTipid, LPCTSTR pszMapName) 機能: 指定したアドレスデータを書き換え。(lTipid = 0 の時は新規登録) 引数: lDbid dbID lTipid tipID pszMapName 1件のアドレスデータを渡す、および、返すためのファイルマッピングの名前 返り値: 成功した場合はTRUE 失敗した場合はFALSE
BOOL AddrConnGetTip(long lDbid, long lTipid, LPCTSTR pszMapName) 機能: 指定したアドレスデータを取得。 引数: lDbid dbID lTipid tipID pszMapName 1件のアドレスデータを渡す、および、返すためのファイルマッピングの名前 返り値: 成功した場合はTRUE 失敗した場合はFALSE
BOOL AddrConnDeleteTip(long lDbid, long lTipid, LPCTSTR pszMapName) 機能: 指定したアドレスデータを消去。 引数: lDbid dbID lTipid tipID pszMapName 1件のアドレスデータを渡す、および、返すためのファイルマッピングの名前 返り値: 成功した場合はTRUE 失敗した場合はFALSE
BOOL AddrConnEditTipV(long lDbid, LPCTSTR pszMapName) 機能: 外部アプリで指定(可変長TipID指定)したアドレスデータの編集画面を開く 引数: lDbid dbID pszMapName 1件のアドレスデータを渡す、および、返すためのファイルマッピングの名前 返り値: 成功した場合はTRUE 失敗した場合はFALSE
BOOL AddrConnPutTipV(LPCTSTR pszMapName) 機能: 指定(可変長TipID指定)したアドレスデータを書き換え。(lTipid = 0 の時は新規登録) 引数: 1件のアドレスデータを渡す、および、返すためのファイルマッピングの名前 返り値: 成功した場合はTRUE 失敗した場合はFALSE
BOOL AddrConnGetTipV(LPCTSTR pszMapName) 機能: 指定(可変長TipID指定)したアドレスデータを取得。 引数: pszMapName 1件のアドレスデータを渡す、および、返すためのファイルマッピングの名前 返り値: 成功した場合はTRUE 失敗した場合はFALSE
BOOL AddrConnDeleteTipV(long lDbid, long lTipid, LPCTSTR pszMapName) 機能: 指定(可変長TipID指定)したアドレスデータを消去。 引数: pszMapName 1件のアドレスデータを渡す、および、返すためのファイルマッピングの名前 返り値: 成功した場合はTRUE 失敗した場合はFALSE

BEGIN_DISPATCH_MAP(CPconDoc, CDocument)
    //{{AFX_DISPATCH_MAP(CPconDoc)
    DISP_FUNCTION(CPconDoc, "AddrConnInit",             AddrConnInit,               VT_BOOL,    VTS_I4)
    DISP_FUNCTION(CPconDoc, "AddrConnOpenDB",           AddrConnOpenDB,             VT_I4,      VTS_I4)
    DISP_FUNCTION(CPconDoc, "AddrConnCloseDB",          AddrConnCloseDB,            VT_BOOL,    VTS_I4)
    DISP_FUNCTION(CPconDoc, "AddrConnEditTip",          AddrConnEditTip,            VT_BOOL,    VTS_I4 VTS_I4)
    DISP_FUNCTION(CPconDoc, "AddrConnGetDBType",        AddrConnGetDBType,          VT_I4,      VTS_NONE)
    DISP_FUNCTION(CPconDoc, "AddrConnReadNextTipData",  AddrConnReadNextTipData,    VT_BOOL,    VTS_BSTR)
    DISP_FUNCTION(CPconDoc, "AddrConnLockOpenDB",       AddrConnLockOpenDB,         VT_I4,      VTS_I4)
    DISP_FUNCTION(CPconDoc, "AddrConnLockCloseDB",      AddrConnLockCloseDB,        VT_BOOL,    VTS_I4)
    DISP_FUNCTION(CPconDoc, "AddrConnRegister",         AddrConnRegister,           VT_I4,      VTS_BSTR VTS_BSTR VTS_BSTR)
    DISP_FUNCTION(CPconDoc, "AddrConnGetDefaultBDid",   AddrConnGetDefaultDBid,     VT_I4,      VTS_NONE)
    DISP_FUNCTION(CPconDoc, "AddrConnFindDBid",         AddrConnFindDBid,           VT_BOOL,    VTS_BSTR VTS_BOOL)
    DISP_FUNCTION(CPconDoc, "AddrConnCreateDB",         AddrConnCreateDB,           VT_I4,      VTS_BSTR)
    DISP_FUNCTION(CPconDoc, "AddrConnCheckDB",          AddrConnCheckDB,            VT_I4,      VTS_BSTR VTS_BSTR VTS_BOOL)
    DISP_FUNCTION(CPconDoc, "AddrConnPutTip", AddrConnPutTip, VT_BOOL, VTS_I4 VTS_I4 VTS_BSTR)
    DISP_FUNCTION(CPconDoc, "AddrConnGetTip", AddrConnGetTip, VT_BOOL, VTS_I4 VTS_I4 VTS_BSTR)
    DISP_FUNCTION(CPconDoc, "AddrConnDeleteTip", AddrConnDeleteTip, VT_BOOL, VTS_I4 VTS_I4)
    DISP_FUNCTION(CPconDoc, "AddrConnEditTipV",   AddrConnEditTipV,   VT_BOOL, VTS_I4 VTS_BSTR)
    DISP_FUNCTION(CPconDoc, "AddrConnPutTipV",    AddrConnPutTipV,    VT_BOOL, VTS_BSTR)
    DISP_FUNCTION(CPconDoc, "AddrConnGetTipV",    AddrConnGetTipV,    VT_BOOL, VTS_BSTR)
    DISP_FUNCTION(CPconDoc, "AddrConnDeleteTipV", AddrConnDeleteTipV, VT_BOOL, VTS_BSTR)
    //}}AFX_DISPATCH_MAP
END_DISPATCH_MAP()