ActiveX HTML-контроль не вызывает код - PullRequest
0 голосов
/ 28 июля 2011

У меня есть объект 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 "temp" выводит как "undefined" ... поэтому я предполагаю, что функция PrintLabel даже никогда не вызывается.


Для получения некоторой справочной информации (которая может или не может помочь в заключении) я использую VS2008, создавая проект смарт-устройства Visual C ++.В решение также добавлен CAB-проект Smart Device.Все решение тогда построено;Я копирую файлы .CAB, .INF, .OCX и .HTML в одну папку на портативном устройстве под управлением Windows CE.

Кроме того, я не очень знаком с C ++ ... и ActiveX.Любая помощь приветствуется !!

Если мне нужно предоставить больше информации, просто укажите мне направление.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 04 августа 2011

В дополнение к комментариям @ Taxilian вы также должны внедрить IObjectSafety , иначе браузер не сможет получить доступ к объекту (это одно из наиболее распространенных упущений для CEэлементы управления, ориентированные на браузер).

2 голосов
/ 04 августа 2011

Чтобы открыть новый метод для JavaScript, вам нужно добавить его в ваш файл IDL;кроме того, вы не сможете вернуть char * из элемента управления ActiveX, вам нужно будет вернуть BSTR.В вашем случае char * освобождается, когда функция выходит из области видимости и в любом случае становится недействительной.

На самом деле происходит то, что javascript проверяет метод PrintLabel на интерфейсе COM, не находит его,и по умолчанию не определено.

0 голосов
/ 05 августа 2011

Я думаю, что проблема была с моим объектом HTML ... теперь у меня есть номер версии и все заглавные буквы для идентификатора класса:

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

теперь все работает нормально.

...