ctWithSite 是否支持IE的調(diào)用
四、添加接口函數(shù)
圖六、調(diào)出增加接口方法的菜單
圖七、增加接口函數(shù) Add
請按照圖示的方法,增加Add()函數(shù),增加Cat()函數(shù) 。[in]表示參數(shù)方向是輸入;[out]表示參數(shù)方向是輸出;[out,retval]表示參數(shù)方向是輸出,同時可以作為函數(shù)運(yùn)算結(jié)果的返回值。一個函數(shù)中,可以有多個[in]、[out],但[retval]只能有一個,并且要和[out]組合后在最后一個位置。(注4)
圖八、接口函數(shù)定義完成后的圖示
我們都知道,要想改變 C++ 中的類函數(shù),需要修改兩個地方:一是頭文件(.h)中類的函數(shù)聲明,二是函數(shù)體(.cpp)文件的實(shí)現(xiàn)處。而我們現(xiàn)在用 ATL 寫組件程序,則還要修改一個地方,就是接口定義(IDL)文件。別著急 IDL 下次就要討論啦。
五、實(shí)現(xiàn)接口函數(shù) 鼠標(biāo)雙點(diǎn)圖八中CFun\基項(xiàng)和接口\Add(...)就可以開始輸入函數(shù)實(shí)現(xiàn)了:
STDMETHODIMP CFun::Add(long n1, long n2, long *pVal){*pVal = n1 + n2;return S_OK;}
這個太簡單了,不再浪費(fèi)“口條”。下面我們實(shí)現(xiàn)字符串連接的Cat()函數(shù):
STDMETHODIMP CFun::Cat(BSTR s1, BSTR s2, BSTR *pVal){int nLen1 = ::SysStringLen( s1 ); // s1 的字符長度int nLen2 = ::SysStringLen( s2 ); // s2 的字符長度*pVal = ::SysAllocStringLen( s1, nLen1 + nLen2 );// 構(gòu)造新的 BSTR 同時把 s1 先保存進(jìn)去if( nLen2 ){::memcpy( *pVal + n