[スレッド全体]

2014/2/14 (金) 20:57:16 もか  
INCM1.23a
[2131] Re: GetDocumentation
情報ありがとうございます。
MEMBERID memidは、対応するメソッドID名を返せばいいんですね。

memid == -1のときに自分の名前を返すようにする必要があるのと、範囲チェックが必要みたいです。
ちょっとウェブで検索した感じでもRScript20のコードでも、エラーを返す時は呼び出し側のBSTRの後処理が行われないので引数に値を設定してはいけないみたいです。
もっともRScriptの場合は、サクラ側のGetContainingTypeLibなどが実装されていないので、GetDocumentationまで到達しないと思います。
もし呼び出し側がBSTRを最初にNULLで初期化しないような実装があった場合は、今の実装だと落ちるかもしれません。
こんな感じでどうでしょうか。
m_sNameは、m_MethodsRef同様CIfObjから引っ張ってくるようにしたうえで、
GetDocumentation(...){
        //        2014.02.12 各パラメータを設定するように
        if( memid == -1 ){
                if( pBstrName ){
                        pBstrName = SysAllocString( m_sName.c_str() );
                }
        }else if( 0 <= memid && memid < m_MethodsRef.size() ){
                if( pBstrName ){
                        pBstrName = SysAllocString( m_MethodsRef[memid].Name );
                }
        }else{
                return TYPE_E_ELEMENTNOTFOUND;
        }
        if( pBstrDocString ){
                *pBstrDocString = SysAllocString(L"");
        }
        if( pdwHelpContext ){
                *pdwHelpContext = 0;
        }
        if( pBstrHelpFile ){
                *pBstrHelpFile = SysAllocString(L"");
        }
        return S_OK;
}

---
GetFuncDesc, GetNamesでmemidの範囲チェックをしていないけどいいんだろうか。

[▼次のスレッド]
INCM/CMT
Cyclamen v3.81
[ut:0.010][st:0.000]