javascript - ActiveX html 控件不调用代码

标签 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”...所以我假设 PrintLabel 函数从未被调用过。


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

此外,我不太熟悉 C++... 也不熟悉 ActiveX。感谢您的帮助!!

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

谢谢!

最佳答案

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

实际发生的是 javascript 检查 COM 接口(interface)上的 PrintLabel 方法,没有找到,只是默认为未定义。

关于javascript - ActiveX html 控件不调用代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6864422/

相关文章:

c++ - 为什么我会收到这些 'already defined' 链接器错误?

c++ - 使用自动 lambda 参数设置外部变量的类型

reporting-services - ReportViewer客户端打印控件 “Unable to load client print control”?

java - 来自 javascript 的 Spring Controller 调用。使用 spring 进行注释

c++ - 在用户插入数据之前创建结构对象时,Vector 返回乱码

c# - 带有 WPF WebBrowser 控件的本地网页中的 VLC ActiveX

javascript - Javascript 函数声明中的双冒号?

javascript - 提交按钮不起作用/没有反应

javascript - 在Bootstrap中,如何识别 "active"导航元素?

javascript - 如何访问 Meteor 空格键中变量引用的数组元素?