青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-60  評(píng)論-262  文章-1  trackbacks-0
有這個(gè)問題是因?yàn)? 我們可能要用 JavaScript 語言作為 "膠水" 粘合我們的 C++/ATL 組件, 那, 怎么在客戶端使用 "膠水" 呢"? 以下就是它的簡(jiǎn)介.

首先, 用 JavaScript 語言編寫組件, 以下是個(gè)例子:

<?xml version="1.0" encoding="UTF-8"?>
<?component error="true" debug="true"?>
<component id="XrhTest.LowerToUpper">

<registration
   description = "UpperCase and lowCase convertion"
   progid="XrhTest.LowerToUpper"
   version="1.0"
   classid="{9B88510F-9D5B-4dcd-9068-8AB0B4F7999C}" remotable="true">
</registration>

<public>

<!-- define method -->
<method name="toLower">
  <parameter name="str"/>
</method>
<method name="toUpper">
  <parameter name="str"/>
</method>

</public>

<script language="JavaScript">
<![CDATA[
function toLower(str)
{
    var result=str.toLowerCase();
    return result;
}
function toUpper(str)
{
    var result=str.toUpperCase();
    return result;
}
]]>
</script>

</component>


將這個(gè)組件保存為 lower2upper.wsc 文件.
然后, 注冊(cè)這個(gè)組件, 方法是, 在這個(gè) wsc 文件上右擊鼠標(biāo), 然后選 "注冊(cè)" 菜單項(xiàng), 完成注冊(cè), 點(diǎn)擊 OK 按鈕完成操作. 如下圖

注冊(cè)完成后, 在注冊(cè)表內(nèi)有以下條目
[HKEY_CLASSES_ROOT\CLSID\{9B88510F-9D5B-4DCD-9068-8AB0B4F7999C}]
@
="UpperCase and lowCase convertion"
"AppID"="{9B88510F-9D5B-4DCD-9068-8AB0B4F7999C}"

[HKEY_CLASSES_ROOT\CLSID\{9B88510F-9D5B-4DCD-9068-8AB0B4F7999C}\InprocServer32]
@
="C:\\WINDOWS\\System32\\scrobj.dll"
"ThreadingModel"="Apartment"

[HKEY_CLASSES_ROOT\CLSID\{9B88510F-9D5B-4DCD-9068-8AB0B4F7999C}\ProgID]
@
="XrhTest.LowerToUpper.1.0"

[HKEY_CLASSES_ROOT\CLSID\{9B88510F-9D5B-4DCD-9068-8AB0B4F7999C}\ScriptletURL]
@
="file:///D:/lower2upper.wsc "

[HKEY_CLASSES_ROOT\CLSID\{9B88510F-9D5B-4DCD-9068-8AB0B4F7999C}\VersionIndependentProgID]
@
="XrhTest.LowerToUpper"
從以上注冊(cè)表項(xiàng)目可以看出, 當(dāng)我們要?jiǎng)?chuàng)建 wsc 組件時(shí), COM 運(yùn)行時(shí)將會(huì)加載 scrobj.dll 鏈接庫, scrobj.dll 鏈接庫將根據(jù) scriptletURL 的鍵值 file:///D:/lower2upper.wsc 加載 wsc 腳本, 最后由 scrobj.dll 將腳本解釋成一個(gè) COM 組件實(shí)例, 將這個(gè)實(shí)例指針返回給調(diào)用者.

最后, 我們來編寫 C++ 客戶端, 隨便創(chuàng)建一個(gè) C++ 文件, 然后用 VC6 編譯, 運(yùn)行, 查看結(jié)果. 示例代碼如下:
#include <atlbase.h>
extern CComModule _Module; 
#include 
<atlcom.h>

void main()
{
    CoInitialize(NULL);

    {
        HRESULT hr 
= E_FAIL;
        CComQIPtr
<IDispatch> spTmp;
        hr 
= spTmp.CoCreateInstance(L"XrhTest.LowerToUpper");
        
if (SUCCEEDED(hr))
        {
            CComDispatchDriver spDisp(spTmp); 
            CComVariant varParam(L
"The quick brown fox jumps over the lazy dog"); 
            CComVariant varResult;
            hr 
= spDisp.Invoke1(L"toUpper"&varParam, &varResult);
            
if (SUCCEEDED(hr))
            {
                MessageBoxW(NULL, (LPCWSTR) varResult.bstrVal, L
"MB_OK", MB_OK); 
            }
        }
    }

    CoUninitialize(); 
}

CComModule _Module; 
如果不出意外, 運(yùn)行結(jié)果將彈出一個(gè)全是大寫文本的對(duì)話框. 如下圖:


以上所講的組件注冊(cè)將會(huì)在注冊(cè)表內(nèi)留下痕跡, 不夠綠色. 如果組件不注冊(cè), 或者腳本內(nèi)沒有 <registration> 元素, 可以使用以下介紹的方法來使用 wsc 組件.
#include <atlbase.h>
extern CComModule _Module; 
#include 
<atlcom.h>

HRESULT CreateScriptComponent(LPCTSTR lpszScriptletURL, OUT IDispatch 
** ppDispatch)
{
    HRESULT hr 
= E_FAIL;
    
do
    
{
        
if (NULL == ppDispatch) {
            
break;
        }


        CComPtr
<IBindCtx> pbc;
        CComPtr
<IMoniker> pMoniker;
        
        hr 
= CreateBindCtx(0&pbc);
        
if (FAILED(hr)) {
            
break;
        }

        
        CComBSTR strPath(L
"script:");
        strPath.Append(lpszScriptletURL);
        ULONG lEaten 
= 0;
        hr 
= MkParseDisplayName(pbc, strPath, &lEaten, &pMoniker);
        
if (FAILED(hr)) {
            
break;
        }

        
        hr 
= BindMoniker(pMoniker, 0, __uuidof(IDispatch), (void**)ppDispatch);
        
if (FAILED(hr)) {
            
break;
        }
 
    }
 while(false);

    
return hr;
}


int _tmain(int argc, _TCHAR* argv[])
{
    HRESULT hr 
= E_FAIL;
    CoInitialize(NULL);
    
    
do
    
{
        CComPtr
<IDispatch> pScript;
        hr 
= CreateScriptComponent(
            _T(
"file:///d:/lower2upper.wsc"), // _T("d:\\lower2upper.wsc")
            &pScript);
        
if (FAILED(hr)) {
            
break;
        }


        CComDispatchDriver spDisp(pScript); 
        
        CComVariant varParam(L
"The quick brown fox jumps over the lazy dog"); 
        CComVariant varResult;
        HRESULT hr 
= spDisp.Invoke1(L"toUpper"&varParam, &varResult);
        
if (SUCCEEDED(hr)) {
            MessageBoxW(NULL, (LPCWSTR) varResult.bstrVal, L
"MB_OK", MB_OK); 
        }

    }

    
while (false);
    
    CoUninitialize();
    
    
return 0;
}


CComModule _Module; 


參考文獻(xiàn):
http://blog.csdn.net/broadview2006/archive/2009/03/19/4004361.aspx
http://www.vckbase.com/document/viewdoc/?id=1518
延伸閱讀:
<<怎樣在 Windows 環(huán)境下調(diào)試 JScript 腳本>>
<<幾行代碼讓你的程序加入vbscipt腳本擴(kuò)展功能>>
http://support.microsoft.com/kb/221992/en-us
http://support.microsoft.com/kb/223139/en-us
http://support.microsoft.com/kb/196135/en-us
http://support.microsoft.com/kb/168214/
http://support.microsoft.com/kb/183698/


PS, 一個(gè)稍微有點(diǎn)用的例子:

源代碼:    http://m.shnenglu.com/Files/free2000fly/jsTest.zip
posted on 2009-05-23 23:06 free2000fly 閱讀(3177) 評(píng)論(2)  編輯 收藏 引用

評(píng)論:
# re: 從 C++/ATL 客戶程序調(diào)用 Javascript 編寫的組件 2009-05-27 10:44 | smm
牛,搞技術(shù)的真厲害啊  回復(fù)  更多評(píng)論
  

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲三级视频| 国产精品久久久久久一区二区三区| 一区二区三区免费在线观看| 国产精品嫩草影院av蜜臀| 久久精品最新地址| 午夜国产精品影院在线观看 | 国产精品成人久久久久| 欧美大色视频| 欧美日韩三级| 国产欧美一区二区精品秋霞影院| 国产欧美日韩综合精品二区| 国产日韩欧美综合精品| 伊人成人网在线看| 夜夜爽99久久国产综合精品女不卡| 在线亚洲伦理| 久久精品91久久香蕉加勒比| 美女久久网站| 99热免费精品| 久久经典综合| 欧美日韩国产限制| 黑人一区二区| 亚洲视频综合在线| 蜜臀av国产精品久久久久| 亚洲精品女人| 亚洲综合电影| 美女视频黄 久久| 欧美日韩福利视频| 国产在线不卡精品| 亚洲曰本av电影| 欧美成人免费在线视频| 一区二区三区免费观看| 久久久欧美一区二区| 欧美日韩免费网站| 在线观看91久久久久久| 亚洲——在线| 亚洲日本成人网| 久久久噜噜噜久噜久久| 国产精品黄视频| 亚洲美女av在线播放| 久久嫩草精品久久久精品| 99精品欧美一区| 免费亚洲电影在线观看| 国产日韩欧美在线视频观看| 一二美女精品欧洲| 亚洲第一区中文99精品| 欧美在线黄色| 国产精品一区二区三区四区五区 | 久久精品成人一区二区三区| 国产精品va| 一本色道久久精品| 亚洲韩国日本中文字幕| 久久视频在线视频| 极品日韩久久| 另类av导航| 久久久久**毛片大全| 国产香蕉97碰碰久久人人| 亚洲免费中文| 在线综合视频| 美女精品网站| 欧美激情一区二区三区| 久久av二区| 国产美女诱惑一区二区| 亚洲一级在线| 中文精品99久久国产香蕉| 欧美日韩精品不卡| 亚洲五月六月| 亚洲综合第一| 国产在线不卡视频| 久色婷婷小香蕉久久| 久久精品亚洲| 伊人一区二区三区久久精品| 久久久水蜜桃av免费网站| 欧美一区二区三区免费大片| 国产欧美日韩激情| 久久夜色精品国产亚洲aⅴ| 久久精品国产精品| 亚洲国产一区二区三区a毛片| 欧美国产日本| 欧美精品在线视频| 香蕉乱码成人久久天堂爱免费| 亚洲视频在线一区观看| 国产欧美视频一区二区三区| 久久久久久网站| 毛片基地黄久久久久久天堂| 亚洲免费高清| 亚洲主播在线| 尤物yw午夜国产精品视频| 欧美国产日韩一区二区在线观看 | 久久精品女人天堂| 亚洲日本成人女熟在线观看| 亚洲精品黄网在线观看| 国产精品视频一二三| 久久综合亚州| 欧美日韩国产系列| 久久久久久久激情视频| 欧美 日韩 国产精品免费观看| 亚洲视频网站在线观看| 欧美一区免费| 一区二区三区蜜桃网| 先锋影音一区二区三区| 亚洲精品在线观| 欧美在线播放高清精品| 99国产精品久久久久久久久久 | 欧美国产日韩精品免费观看| 欧美日韩国产精品一区二区亚洲| 久久国产色av| 欧美欧美午夜aⅴ在线观看| 久久国内精品自在自线400部| 欧美顶级少妇做爰| 久久久久久久综合| 欧美网站在线| 亚洲青涩在线| 亚洲第一级黄色片| 香港成人在线视频| 亚洲性视频h| 欧美高清在线视频观看不卡| 久久久精品免费视频| 欧美日韩视频在线第一区| 国产亚洲欧美色| 亚洲视频一区在线观看| 老司机免费视频久久| 久久精品一区二区三区不卡| 欧美精品一区在线观看| 欧美二区在线播放| 韩国一区二区在线观看| 亚洲一区二区三区精品动漫| 99国产精品一区| 免费成人在线观看视频| 久热综合在线亚洲精品| 国产日韩欧美不卡在线| 99视频+国产日韩欧美| 日韩一区二区精品| 欧美激情视频一区二区三区在线播放| 久久人人超碰| 精久久久久久| 久久天天躁夜夜躁狠狠躁2022| 久久精品99国产精品日本| 国产精品一区二区三区久久久| 亚洲视频 欧洲视频| 亚洲你懂的在线视频| 国产精品久久午夜| 亚洲欧美国产制服动漫| 欧美一区国产二区| 国产日韩欧美一区在线| 午夜精品久久久久久| 久久精品免费看| 影音欧美亚洲| 久久视频这里只有精品| 亚洲国产1区| 国产精品99久久久久久久久| 欧美日韩一区二区免费视频| 夜夜嗨av一区二区三区中文字幕| 亚洲深夜福利| 国产欧美日韩免费| 久久精品国产精品 | 欧美一区二粉嫩精品国产一线天| 欧美一二三视频| 国产综合久久久久久| 久久午夜国产精品| 亚洲精品一区二| 香蕉av777xxx色综合一区| 国产亚洲a∨片在线观看| 久久嫩草精品久久久久| 亚洲激情六月丁香| 亚洲综合日韩在线| 国产一区二区三区久久精品| 久久久久一区二区三区四区| 亚洲激情小视频| 午夜一区不卡| 在线观看欧美日本| 欧美亚洲成人网| 久久久国产精品一区二区中文 | aa亚洲婷婷| 久久久噜噜噜久久| 99精品欧美| 国产偷国产偷精品高清尤物| 麻豆精品网站| 亚洲综合不卡| 亚洲国产精品综合| 欧美制服丝袜| 一本色道**综合亚洲精品蜜桃冫| 在线精品高清中文字幕| 日韩视频免费| 国产区亚洲区欧美区| 免费视频一区| 性伦欧美刺激片在线观看| 欧美成人一区二区三区片免费| 一区二区三区精密机械公司 | 亚洲国产一区二区三区青草影视| 欧美视频在线观看一区| 久久国产日韩欧美| 日韩视频在线一区| 能在线观看的日韩av| 午夜电影亚洲| 一本大道av伊人久久综合| 激情视频一区二区三区| 国产女人18毛片水18精品| 欧美精品一区二区三| 久久中文欧美| 久久精品国产亚洲a|