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

隨筆-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>
            免费亚洲视频| 久久日韩粉嫩一区二区三区| 一区二区欧美在线观看| 欧美日韩一区二区视频在线观看| 国产乱人伦精品一区二区| 亚洲美女在线看| 欧美一区影院| 亚洲一区二区三区欧美| 欧美午夜无遮挡| 在线亚洲欧美| 99精品欧美一区二区三区| 欧美精品午夜| 亚洲午夜av| 亚洲一区二区免费在线| 国产精品久久久久久久电影| 亚洲一级二级在线| 99在线|亚洲一区二区| 欧美色偷偷大香| 亚洲一区二区三区视频| 日韩视频永久免费| 欧美色欧美亚洲高清在线视频| 亚洲天堂男人| 亚洲专区在线| 国产香蕉97碰碰久久人人| 欧美一区二区网站| 午夜一区不卡| 狠狠色狠色综合曰曰| 美女网站久久| 欧美成人免费大片| 亚洲午夜激情网站| 亚洲欧美激情精品一区二区| 国产一区二区精品久久99| 老牛影视一区二区三区| 蜜臀av国产精品久久久久| 亚洲国产另类久久久精品极度| 亚洲第一网站| 久久天堂成人| 日韩亚洲欧美一区| 亚洲自拍另类| 国内精品久久久久影院 日本资源| 久久久精品国产免大香伊| 久久天天躁夜夜躁狠狠躁2022| 亚洲国产精品一区二区久| 亚洲九九精品| 国产欧美一区二区精品婷婷 | 伊人成人在线| 亚洲伦理精品| 国内精品福利| 99国产精品国产精品毛片| 国产一区二区精品久久91| 亚洲第一主播视频| 国产精品一级| 亚洲国产成人在线播放| 国产精品扒开腿爽爽爽视频| 久久亚洲一区| 欧美手机在线| 欧美国产日韩一二三区| 国产精品亚洲美女av网站| 免费久久精品视频| 国产精品久久久久久久免费软件 | 欧美日韩专区在线| 欧美中文字幕视频在线观看| 欧美1区2区3区| 性做久久久久久| 嫩草影视亚洲| 久久久久成人精品免费播放动漫| 欧美久久视频| 欧美电影电视剧在线观看| 国产精品一区在线观看| 亚洲国产视频直播| 国产欧美一区二区精品仙草咪| 91久久综合亚洲鲁鲁五月天| 国内精品亚洲| 亚洲欧美日韩人成在线播放| 这里只有精品在线播放| 免费亚洲一区| 毛片一区二区| 国产中文一区二区| 亚洲午夜精品一区二区| av成人激情| 欧美国产一区在线| 欧美a级片网站| 国产无一区二区| 亚洲午夜在线观看视频在线| 一区二区三区视频在线观看| 久久天天狠狠| 欧美成人日本| 亚洲黄色免费电影| 久久综合999| 欧美成人精品三级在线观看| 精品动漫av| 久久久久久久999精品视频| 先锋影音一区二区三区| 国产精品久久久久久户外露出 | 国产伦精品一区二区三区四区免费 | 亚洲欧美日韩精品一区二区 | 亚洲国产va精品久久久不卡综合| 香蕉av777xxx色综合一区| 香蕉亚洲视频| 国产性天天综合网| 久久九九国产精品怡红院| 久久精品综合一区| 影音先锋中文字幕一区| 久久久青草婷婷精品综合日韩| 久久免费黄色| 亚洲二区三区四区| 噜噜噜躁狠狠躁狠狠精品视频| 欧美国产视频一区二区| 亚洲免费电影在线| 欧美日韩国产在线播放网站| 99精品免费视频| 欧美亚洲综合网| 黄色欧美成人| 暖暖成人免费视频| 一本久道久久综合婷婷鲸鱼| 欧美一区二区三区另类 | 91久久精品一区二区三区| 欧美激情第二页| 欧美成人精品h版在线观看| 国产精品人人做人人爽人人添| 亚洲一级黄色av| 久久男女视频| 日韩一级在线观看| 国产精品私房写真福利视频| 久久精品国产精品亚洲| 欧美国产精品中文字幕| 亚洲一级影院| 一区二区三区在线不卡| 欧美日韩免费在线| 久久国产精品一区二区| 欧美激情精品久久久久久大尺度| 亚洲视频第一页| 在线观看精品视频| 欧美私人网站| 美日韩精品免费| 亚洲女同同性videoxma| 亚洲高清不卡在线观看| 欧美在线国产| 亚洲精品视频免费在线观看| 国产美女精品| 欧美伦理在线观看| 久久久久一区二区三区四区| 亚洲美女诱惑| 蜜桃伊人久久| 久久国产主播精品| 一级成人国产| 亚洲高清不卡在线观看| 国产精品一二三视频| 欧美日韩成人在线视频| 久久久久久亚洲精品不卡4k岛国| 夜夜嗨av色一区二区不卡| 欧美xx视频| 久久精品欧洲| 欧美一区激情视频在线观看| 亚洲视频一区二区| 亚洲人成77777在线观看网| 国产午夜精品视频免费不卡69堂| 欧美激情视频一区二区三区在线播放 | 欧美精品久久99| 久久激情五月激情| 亚洲永久在线观看| 99香蕉国产精品偷在线观看| 亚洲国产成人av好男人在线观看| 欧美在线亚洲综合一区| 亚洲一区二区影院| 一区二区精品在线| 亚洲国产精品精华液2区45| 国产在线精品二区| 国产精品一香蕉国产线看观看| 欧美日韩在线一二三| 欧美久久久久久蜜桃| 欧美不卡高清| 久久综合伊人77777麻豆| 欧美在线精品免播放器视频| 午夜精品在线看| 小黄鸭精品aⅴ导航网站入口| 亚洲一区二区三区在线播放| 亚洲一区二区三区视频播放| 亚洲综合色噜噜狠狠| 亚洲免费视频观看| 午夜精品福利电影| 亚洲影院色无极综合| 9l国产精品久久久久麻豆| 一本久久a久久免费精品不卡| 亚洲色诱最新| 中文日韩欧美| 亚洲欧美中文在线视频| 欧美一级理论片| 久久久久久综合| 亚洲欧美在线网| 亚洲第一页自拍| 亚洲欧洲精品一区二区三区 | 欧美电影电视剧在线观看| 猫咪成人在线观看| 欧美精品久久一区二区| 欧美成人有码| 国产精品久久久久久久久久尿 | 国产精品一区二区你懂得| 国产精品揄拍500视频| 国产亚洲一区在线|