ActiveX html控件不调用代码

时间:2011-07-28 19:15:58

标签: javascript c++ activex windows-ce

我有一个如下定义的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警报中输出此文本。

问题是,“temp”javascript变量输出为“undefined”...所以我假设P​​rintLabel函数永远不会被调用。


对于某些背景信息(结论可能有帮助或可能没有帮助),我正在使用VS2008,创建一个Visual C ++智能设备项目。该解决方案还添加了智能设备CAB项目。然后构建整个解决方案;我将.CAB,.INF,.OCX和.HTML文件复制到运行Windows CE的手持设备上的单个文件夹中。

另外,我不熟悉C ++ ......也不熟悉ActiveX。任何帮助表示赞赏!!

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

谢谢!

3 个答案:

答案 0 :(得分:2)

为了向javascript公开新方法,您需要将其添加到IDL文件中;此外,您将无法从ActiveX控件返回char *,您需要返回BSTR。在您的情况下,当函数超出范围并且无论如何都变为无效时,将释放char *。

实际发生的是javascript在COM接口上检查PrintLabel方法,找不到,并且默认为undefined。

答案 1 :(得分:2)

除了@ Taxilian的评论之外,你还必须实现IObjectSafety或者浏览器将无法访问该对象(这是CE浏览器最常见的遗漏之一 - 目标控制)。

答案 2 :(得分:0)

我认为问题出在我的HTML对象上...我现在有了版本号,并且所有类别的上限都是:

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

现在一切正常。