Вызов функций dll из JScript: COM, ActiveX и др. извращения

Обсуждение вопросов клиентского программирования.

Модератор: Duncon

Ответить
Алькор
Сообщения: 3
Зарегистрирован: 07 окт 2004, 15:01
Откуда: Киев, Украина
Контактная информация:

День добрый, народ!

Возникла задача организации взаимодействия в тонком клиенте JScript с dll-кой на клиентской машине. Насколько я могу судить, такое взаимодействие можно организовать, если сделать COM-интерфейс к dll-ке и вызывать его через тэг OBJECT или через new ActiveXObject.

Никогда раньше я с COM-технологиями не сталкивался (и, признаться, не слишком жалел об этом) однако надо -- значит надо. Накатал тестовое приложение и HTML-ку к нему с тэгом OBJECT, запустил... И только ошибка "Object doesn't support this property or method" была мне ответом.

Натурально я подумал, что не так вызывал из JScript'а свой ActiveX-control. Однако, поэкспериментировал с системными ActiveX-control'ами и убедился, что с этой стороны у меня ошибок, вроде, не наблюдается. Остается предположить, что я неправильно пишу сам COM-сервер. А как его правильно писать? Подскажите, а?

С всяческими пожеланиями,
Алькор.

PS ActiveX я вызываю так:

Код: Выделить всё

<HTML>
  <HEAD>
    <TITLE>Dilmah OCX Test Page</TITLE>
  </HEAD>
  <BODY>
    <OBJECT classid="classid:C27B60BD-B77E-4409-B39A-BFAAF3626EEB" id="Dilmah"></OBJECT>
    <SCRIPT language="JavaScript">
      function UseTeaBag ()
      {
        Dilmah.Alice = document.TeaCup.Alice.value;    
        Dilmah.DoAuthorization();
        document.TeaCup.Bob.value = Dilmah.Bob;
      }
    </SCRIPT>
    <FORM name="TeaCup" id="TeaCup" action="JavaScript:UseTeaBag();">
      <TABLE border=0 cellspacing=0 cellpadding=3>
        <CAPTION>Dilmah OCX Test Form</CAPTION>
        <TR>
          <TD width=50%>Alice</TD>
          <TD width=50%>Bob</TD>
        </TR>
        <TR>
          <TD width=50%><INPUT type="text" name="Alice" id="Alice"></TD>
          <TD width=50%><INPUT type="text" name="Bob" id="Bob"></TD>
        </TR>
        <TR>
          <TD width=50%></TD>
          <TD width=50%><INPUT type="submit" value="DoAuthorization()"></TD>
        </TR>
      </TABLE>
    </FORM>
  </BODY>
</HTML>
[/color]
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

К скриптовым языкам с динамическими типами нужен Automation COM Server, который реализует IDispatch.
Проще всего это сделать с помощью Визарда из Visual C.
Там указываешь, что тебе нужен COM - объект с двойным (dual) интерфейсом.
2B OR NOT(2B) = FF
Алькор
Сообщения: 3
Зарегистрирован: 07 окт 2004, 15:01
Откуда: Киев, Украина
Контактная информация:

Absurd писал(а):К скриптовым языкам с динамическими типами нужен Automation COM Server, который реализует IDispatch.
Проще всего это сделать с помощью Визарда из Visual C.
Там указываешь, что тебе нужен COM - объект с двойным (dual) интерфейсом.
Спасибо!
Алькор
Сообщения: 3
Зарегистрирован: 07 окт 2004, 15:01
Откуда: Киев, Украина
Контактная информация:

Дополнительный вопрос: А как сделать то же самое в Delphi? Не очень люблю -- и, соответственно, не очень знаю -- этот язык, а писать, похоже, придется именно на нем...
Ответить