<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    codefans

    導(dǎo)航

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統(tǒng)計

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    程序設(shè)計鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    COM初學(xué)者必看

    1.我用ATL生成一個組件對象,我在COM中使用IDD_IEncrypt,這個在哪里寫義,是啥?GUID?
    答:IDD_IEncrypt是GUID,也稱作CLSID,放到該項目的對象的xxx_i.c文件中。

    2.S_OK,NOERROR等常量中定義在哪些文件上(偷一下懶)(VC6.0)。
    答:winerror.h中

    3.我在一個ASP組件對象中有構(gòu)造函數(shù)使用SysAllocString()分配內(nèi)存在該對象的類變量,在DLL Release memory的時候,我要調(diào)用SysFreeString(),可是好像該對象沒有析構(gòu)函數(shù),我在哪兒處理。
    答:可以自己添個析構(gòu)函數(shù),在里面調(diào)用SysFreeString。或可以使用_bstr_t或CComBSTR,就省得釋放內(nèi)存了。

    4.BSTR指針的內(nèi)容如何拷貝到LPOLESTR指針上?
    答:BSTR是COM使用的特殊字符串類型,它的開頭是BSTR所包含的字符串的字節(jié)長度,然后才是字符串,該字符串以null
    結(jié)束,不過普通的字符串中間是不允許包含null的,但是BSTR允許,因為它前面已經(jīng)有該字符串的長度了。如果要在BSTR和我們
    所常見的字符串類型轉(zhuǎn)換,一般不必自己轉(zhuǎn)換,用_bstr_t類就可以。這也是微軟所推薦的。比如要從BSTR m_bstrA 轉(zhuǎn)為 char*
    可以這樣:
    char* pStr;
    pStr = (char*)_bstr_t(m_bstrA);
    很簡單吧。
    如果要從char* pStr轉(zhuǎn)為BSTR,這樣作:
    BSTR m_bstrA;
    m_bstrA = _bstr_t(pStr).copy();
    其它類型轉(zhuǎn)換我沒試過,不過從char*轉(zhuǎn)為
    LPCTSRT之類應(yīng)該就不會太難了。
    (注:看一看第9條,唉!,自已夠笨的)

    5.在COM方法中能不能使用try...catch?
    答:在COM中可以用try,catch塊,但在Project->Settings->C/C++->C++ Language下要選中Enable Exception Handling。如果你用try,catch塊,可在catch塊中可以這樣寫:Error((BSTR)e.Description, IID_*, e.Error())(e是_com_error)。

    6.我的組件有一個方法Encrypt,需要傳入一個加密字符串,加密后將字符串返回給VB,在VB中我使用 s=jj.Encrypt(數(shù)據(jù)),那么我在COM中該如何定義該方法?
    答:返回值要是[out]屬性,要想用以上方法使用,最后一個參數(shù)用[out,retval]BSTR* pEncryptString,這將作為返回字符串。
    完整定義如下:
    [id(2), helpstring(加密)] HRESULT Encrypt(BSTR EncryptString,[out,retval]BSTR *pEncryptString);]

    7.我的屬性為什么不能進行賦值?
    我在組件里加一個屬性Key,可以get與put,在組件源程序中有g(shù)et_Key()與put_Key(),get_Key工作正常,可我的put_Key不正常呀!,源程序如下:
    STDMETHODIMP CEncrypt::put_Key(BSTR newVal)
    {
    m_pKey=newVal;//m_pKey為類變量,如下定義:BSTR m_pKey;
    return S_OK;
    }
    答:m_pKey=SysAllocString(newVal);

    8.如何更改控件或組件的在注冊時存放在注冊表中的名稱?

    自已答:告訴你,不在.idl,在你的xxx.rgs文件中,全改了,是不是已經(jīng)...,嘿嘿~~.

    9.ATL中CComBSTR與_bstr_t的區(qū)別?嘿嘿~~,我現(xiàn)在才明白一點,高手莫笑。
    答:
       共同點:對于BSTR到BSTR,BSTR到對象(CComBSTR/_bstr_t),對象到BSTR,兩者之間沒有什么區(qū)別,CComBSTR與_bstr_t都能很好地管理處理BSTR.
      異同點:_bstr_t提供了BSTR到char,wchar_t指針的處理,也就是說能把BSTR的內(nèi)容拷貝成char*,而CComBSTR就沒有這種功能。

    10.OLE_COLOR與COLORREF,VARIANT_BOOL與BOOL有何區(qū)別?
    答:我是不知道,不過可以直接進行賦值。嘿嘿..,是不是太土吧!
    以下是陸大蝦的進課:
    OLE_COLOR與COLORREF之間是有一定區(qū)別的。OLE_COLOR和COLORREF都是DWORD類型,但對于COLORREF來說,它的最高一個字節(jié)永遠是0x00。即如果是紅色,對于COLORREF來說是0x000000FF。而OLE_COLOR的最高一個字節(jié)有兩種情況:0x80(也就是10000000,最高位是1)或0x00(也就是00000000,最高位是0)。當OLE_COLOR的最高位是0時,它與COLORREF是相同的,最后三個字節(jié)代表RGB,可以相互賦值。例如紅色用OLE_COLOR來表示同樣是0x000000FF。但當OLE_COLOR的最高位是1時,它的中間兩個字節(jié)一定都是0x00,最后一個字節(jié)表示的是系統(tǒng)顏色索引值。例如系統(tǒng)定義菜單的顏色索引值是4,所以用OLE_COLOR來表示就是0x80000004。在VB中,如果你選中一個FORM,在它的屬性頁中你可以看到它的BackColor屬性,你點擊下拉框,就可以選擇是使用調(diào)色板色還是系統(tǒng)色,調(diào)色板色就是對應(yīng)了OLE_COLOR的高位為0的情況,系統(tǒng)色對應(yīng)的是OLE_COLOR高位為1的情況。你試一下就知道是怎么回事了。

    VARIANT_BOOL和BOOL之間也有區(qū)別。BOOL為long,在BOOL中,TURE為1,F(xiàn)ALSE為0。VAIRNAT_BOOL為short,在VARIANT_BOOL中,VARIANT_TRUE為-1(0xFFFF),VARIANT_FALSE為0(0x0000)。并且VARIANT_BOOL是和VB中的Boolean相同的,就像BSTR和String的關(guān)系一樣。所以,在自動化組件及控件中應(yīng)該使用VARIANT_BOOL。

    11.如何知道該Activex是在VB的設(shè)計時還是運行時?
    答:判斷run-mode和design-mode的方法是CComControl::GetAmbientUserMode,你可以在MSDN中找到這個函數(shù)的用法。

    12.我的ActiveX控件有一個屬性Algin,我想在VB中列出其屬性值出現(xiàn)一個ComboBox來列出我定義的幾個值?,有的枚舉出來左邊有圖像,右邊有文字說明,這是如何實現(xiàn)的?
    答:簡單的靜態(tài)枚舉直接在 IDL 文件中定義枚舉類型,把屬性的類型定為枚舉類型即可。動態(tài)枚舉比較麻煩,主要涉及到 IPerPropertyBrowsingImpl<CATLControlWin> 的下列方法:MapPropertyToPage, GetPredfinedStrings, GetPredefinedValue, GetDisplayString。具體實現(xiàn)方法請參考《Visual C++ 5 ActiveX 編程指南》,Jerry Anderson 著,清華大學(xué)出版社。
    以下簡單的靜態(tài)枚舉的代碼片段(以Align屬性說明):
    //typedef enum tagFontAlign{Left=0,Center=1,Right=2}FontAlign;(比較完整的如下)
    typedef enum tagFontAlign
    {
    [helpstring(Left)]Left=0,
    [helpstring(Center)]Center=1,
    [helpstring(Right)]Right=2,
    }FontAlign;
    [propget, id(2), helpstring(對齊方式)] HRESULT Align([out, retval] FontAlign *pVal);
    [propput, id(2), helpstring(對齊方式)] HRESULT Align([in] FontAlign newVal);
    在接下來的接口定義中添加屬性Align時,屬性的數(shù)據(jù)類型就填FontAlign,其它操作照常。編譯完以后,你就應(yīng)該在VB Project中的Object Browser中看到有這么一個枚舉類型。在控件屬性中選中Align時,就會有個Combo Box讓你選擇FontAlign中的一個值。

    13.如何創(chuàng)建一個容器,像VB中的Tabbed Dialog容器,控件在它范圍內(nèi)移動?
    答:這要靠控件容器實現(xiàn) ISimpleFrameSite 接口,在 MSDN 中搜索 Extending ATL 3.0 Control Containment to Help You Write Real-world Containers。

    14.在ATL中使用其默認的Font屬性的話,會產(chǎn)生以下錯誤:
    warning MIDL2039 : interface does not conform to [oleautomation] attribute
    warning MIDL2039 : interface does not conform to [oleautomation] attribute
    warning MIDL2039 : interface does not conform to [oleautomation] attribute
    答:這可是困惑我N天,也不知道白了多少根頭發(fā),這是一個BUG,在Microsoft的KnowLedge的有這一個BUG報告:
        “BUG: MIDL2039 Warning with IFontDisp/IPictureDisp Parameter Type”

    15.在ATL中產(chǎn)生的Active X中使用默認的Font屬性的話,在VB中的對象屬性頁中對其屬性進行賦值,會產(chǎn)生一個錯誤:
    “Invalid Properties Value”.
    答:該屬性在ATL產(chǎn)生后需要在作些設(shè)置才能用,在Microsoft的KnowLedge的有一篇文章:
    《Using Fonts in ATL Controls with NiceText.exe》

    16.在ATL中產(chǎn)生的Active X中使用默認的Font屬性,在.IDL中產(chǎn)生默認接口定義,該如何使用該接口定義呢?
    答:#include <ocidl.h>
    IFont *piFont;
    HRESULT hr;
    HFONT hfont;

    hr = m_pFont->QueryInterface(IID_IFont, (void **)&piFont);
    if(SUCCEEDED(hr))
    {
    hr = piFont->get_hFont(&hfont);

    lhxx的小貢獻
    在程序中調(diào)用要動態(tài)分配內(nèi)存或?qū)嵗腃OM時要注意要用指針的地址來進行參數(shù)傳遞:
    ... Sample(int **pInput)
    {
        *pInput = ...;
      ....
    }
    ... Sample1( BSTR *pbstr)
    {
      *pbstr = (BSTR) malloc (.....);
      ....
    }

    如何打算學(xué)習ActiveX開發(fā)的話,這本書一定要看《Visual C++ 5 Active X編程指南》,學(xué)習COM一定要看《Inside COM》,《COM原理與應(yīng)用》;還可參雨考我在CSDN的文檔中心上發(fā)表的《COM錯誤處理》,嘿嘿~~,初學(xué)者看之有大補呀!,^_^.....

    posted on 2005-07-27 10:19 春雷的博客 閱讀(315) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产一精品一AV一免费| 免费在线不卡视频| 亚洲视频在线播放| 亚洲色大网站WWW永久网站| 91av免费观看| 亚洲国产成人a精品不卡在线 | 国产亚洲精品免费| 亚洲综合网美国十次| 真实国产乱子伦精品免费| 亚洲成a人片在线观看中文app| 91久久精品国产免费直播| 亚洲中文字幕久久精品无码APP| 亚洲最大天堂无码精品区| 无码一区二区三区免费视频| 亚洲综合无码无在线观看| 日韩一区二区在线免费观看| 亚洲美女自拍视频| 鲁丝片一区二区三区免费| 亚洲AV福利天堂一区二区三 | 亚洲中文字幕无码久久精品1| 久青草视频97国内免费影视| 国产男女猛烈无遮挡免费网站| 爱爱帝国亚洲一区二区三区| 亚洲不卡AV影片在线播放| 免费无码作爱视频| 国产亚洲精品久久久久秋霞| 久久香蕉国产线看免费| 亚洲三级在线播放| 97性无码区免费| 亚洲JLZZJLZZ少妇| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 夜色阁亚洲一区二区三区| 亚洲AV日韩综合一区尤物| 亚洲AV蜜桃永久无码精品| 人人玩人人添人人澡免费| 亚洲a级在线观看| 亚洲真人日本在线| 91精品手机国产免费| 亚洲av无码av在线播放| 免费无遮挡无码视频网站| 久久嫩草影院免费看夜色|