Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > ASP > Экспорт компонентов, методы С++ в JavaScript


Автор: racner 14.5.2010, 10:02
Здравствуйте дорогие эксперты!

Работая с ASP столкнулся с одним моментом и у меня возник такой вопрос:

Как же передаются аргументы функций из  одного языка (в данном случае - JavaScript) в функции компоненты, написанной на С++

Вот примерно такой код:
Код

//файл напр. default.asp 

<% 
Session("MyObject") = Server.CreateObject("MyProg.MyClass.1"); // получаем ссылку на Объект по ProgID


try
{
// используем объект
pMyArrObj = Session("MyObject").MyMethod(param1,
                                                   param2,
                                                    param4,
                                                    param5,
                                                    param6,
                                                    param7);
}
 catch (exception)
{
//что-то не так
}
%>

// а вот метод на С++ [I](файл например MyClass.cpp)[/I] в компоненте определяется так:

HRESULT MyClass::MyMethod(
    /*[in]*/ int param1,
    /*[in]*/ int param2,
    /*[in]*/ int param3,
    /*[in]*/ int param4,
    /*[in]*/ int param5,
    /*[in]*/ int param6,
    /*[in]*/ int param7,
    /*[out, retval]*/ CMyArrObj* pMyArrObj1)
{
     /*какой-то код*/

    return E_INVALIDARG;

    /*какой-то код*/

    return S_OK;
}



Почему в реализации функция возвращает значение HRESULT, НО мы испльзуем ее в JavaScript как будто она возвращает указатель на CMyArrObj. В добавок используем  исключение catch (exception), будто она все-таки возвратила HRESULT...

Где про это можно почитать поподробнее, желательно на русском? (или книга какая-нить может есть= )  )

заранее благодарен за внимание =)
    

Автор: racner 30.7.2010, 13:17
Мне стало понятно в чем тут дело.

Для описания интерфейса в Проекте сущестуют специальные файлы с описанием интерфейса: *.idl

Там может быть такая строчка:

Код

[id(62), helpstring("method GetFieldInAD")] HRESULT GetFieldInAD([in] BSTR Domain,[out, retval] BSTR *pField);


Ключевое слово retval как раз и говорит о том, что функция может вызываться так: 

pFiled  = GetFieldInAD("Domain");

ровно как и:

GetFieldInAD("Domain", pField);

=)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)