Как вызвать функцию COM-объекта из классического ASP - PullRequest
0 голосов
/ 06 июля 2011

На моем классическом ASP-сайте мне нужно вызвать функцию COM-объекта.

Вот определение компонента COM:

interface IMyComponent : IDispatch
{ 
   HRESULT GetVersion([in] int, [out] double*, [out] BSTR*);
}

На стороне сервера я создаю объект-компонент и пытаюсь вызвать 'Функция GetVersion:

<%
    Dim app
    Set app = CreateObject("MyComponent")

    Dim someUsefulValue
    Dim version

    app.GetVersion 1, someUsefulValue, version
%>

Но этот код завершается с ошибкой «Несоответствие типов».Как мне вызвать эту функцию?

Ответы [ 3 ]

1 голос
/ 06 июля 2011

Прежде всего, имейте в виду, что никакой другой браузер не поддерживает ActiveX , а не Internet Explorer, поэтому я хотел бы еще раз подумать, если вам не нужен другой подход к проблеме, возможно, с использованием другого компонента, которыйболее открыта для других браузеров ...

как Microsoft Silverlight (если вы идете по пути .NET), Adobe Flash , Shockwave , Air ...

в HTML

На вашей ASP-странице должен быть <object> код вашего ActiveX

<OBJECT ID="myActiveX "
    CLASSID="clsid: yourControlId">
</OBJECT>

тогда вы просто действуете как обычный объект DOM

var myActiveX = document.getElementById("myObject");
alert( myActiveX.GetVersion(...) );
0 голосов
/ 06 июля 2011

Попробуйте:

<%
    Dim app
    Set app = Server.CreateObject("MyComponent")

    Dim someUsefulValue
    Dim version

    app.GetVersion 1, someUsefulValue, version
%>

На стороне сервера вы должны использовать Server.CreateObject , а не просто CreateObject , как обычно используется для VBScript на стороне клиента.

Убедитесь, что COM-объект установлен и зарегистрирован с помощью regsvr32 MyComponent.dll

0 голосов
/ 06 июля 2011

Измените тип первого параметра метода COM на long, а не на int. Long переводит в тип варианта VT_I4, а int переводит в VT_INT. Если память мне не изменяет, VBScript не распознает VT_INT, так как он не является «типом, совместимым с автоматизацией» (размер int может быть не фиксирован для компиляторов / платформ!)

...