2011-07-28 61 views
0

我有一個ActiveX HTML對象的定義如下:的ActiveX HTML控件不調用代碼

<object id="HSMBTPrintX1" width="350" height="350" 
    classid="CLSID:68d05400-18a6-4b39-b3ff-a17d77c1eddf" codebase=".\HSMBTPrintX.ocx"> 

和一個按鈕:

<input type="button" name="Print" value="Print" onclick="PassParameter()" /> 

此按鈕將調用按鈕和控制上面定義一些javascript:

<script language="javascript" type="text/javascript"> 
    function PassParameter() { 
      if (StringInput.value != " ") { 
       alert('1 - ' + HSMBTPrintX1); 
       HSMBTPrintX1.InputParameter = StringInput.value; 
       alert('2 - ' + StringInput.value); 
       var temp = HSMBTPrintX1.PrintLabel(); 
       alert('3 -' + temp); 
      } 
    } 
</script> 

我的PrintLabel C++代碼方法,在這裏:

char* CHSMBTPrintXCtrl::PrintLabel(void) 
{ 
    return "temp"; 
    //AFX_MANAGE_STATE(AfxGetStaticModuleState()); 

    // TODO: Add your dispatch handler code here 
    TCHAR g_szComPort[16]; 
    char szout[512]; 
    HANDLE hCom; 
    TCHAR comPort[16]; 
    unsigned long bytesWritten; 
    int counter; 
    AFX_MANAGE_STATE(AfxGetStaticModuleState()); 
    if (!FindBluetoothPort(g_szComPort)) 
    return "minus two"; 
    hCom = CreateFile(comPort,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,0,0); 
    if (hCom == NULL) 
    return "minus one"; 
    CStringA charstr(m_InputParameter); 
    // Create text to send to printer 
    strcpy(szout, "^XA\n"); 
    strcat(szout, "^PRC ^LH0,0 ^LL203 ^PW406 ^MD5 ^MFF,F ^MMT ^MNM ^CF0,20,12 ^XB\n"); 
    strcat(szout, "^FO20,05 ^AFN ^FV MASTER PACK ^FS\n"); 
    strcat(szout, "^XZ"); 

    // Write file to Bluetooth COM port 
    if(WriteFile(hCom,szout,256,&bytesWritten,NULL)==0) 
    { 
     return "one"; 
    } 
    return "two"; 
    FireLabelPrinted(); 
} 

正如您所看到的(僅用於測試),只要函數被調用,它就會返回一些文本。我試圖在javascript警報中輸出這個文本。

問題是,「臨時」JavaScript變量輸出爲「未定義」...所以我假設P​​rintLabel函數甚至不會被調用。


對於一些背景信息(這可能會或可能不會在結論幫助),我使用VS2008,創建一個Visual C++智能設備項目。該解決方案還添加了智能設備CAB項目。整個解決方案然後建立;我將.CAB,.INF,.OCX和.HTML文件複製到運行Windows CE的手持設備上的單個文件夾中。

此外,我不是很熟悉C++ ...也不是ActiveX。任何幫助表示讚賞!

如果我需要提供更多信息,請指出我的方向。

謝謝!

回答

0

我認爲這個問題是我的HTML對象......我現在的版本號,和所有帽類ID:現在

<object id="HSMBTPrintX1" width="350" height="350" 
        classid="CLSID:68D05400-18A6-4B39-B3FF-A17D77C1EDDF" 
        codebase=".\HSMBTPrintX.ocx#1,0,0,1"> 

一切工作正常。

2

爲了向javascript公開新的方法,您需要將它添加到您的IDL文件;另外,你將無法從ActiveX控件返回char *,你需要返回一個BSTR。在你的情況下,當函數超出範圍並且無論如何無效時都會釋放char *。

實際發生的是javascript在COM接口上檢查PrintLabel方法,沒有找到它,並且只是默認爲undefined。

2

除了@ Taxilian的評論,你還必須實現IObjectSafety瀏覽器將無法訪問對象(這是CE瀏覽器的有針對性的控制比較常見的疏漏之一)。