Здравствуйте. Есть вопрос (точнее 2).
Имеется in-proc COM компонент, выполняет массу полезных вещей и построен на основе Simple Object. Прекрасно работает в MFC приложении, но не хочет создаваться в ASP сценарии. Для пробы создал COM компонент на основе ActiveXServerComponent он может использоваться и в MFC приложении и в ASP сценарии.
Вопрос 1: Чем отличаются объекты созданные на базе Simple Object и ActiveXServerComponent.
Вопрос 2: Как теперь использовать имеющийся объект в ASP сценарии.
За ранее благодарен.
Здравствуйте BoikoRoman, Вы писали:
BR>Имеется in-proc COM компонент, выполняет массу полезных вещей и построен на основе Simple Object. Прекрасно работает в MFC приложении, но не хочет создаваться в ASP сценарии.
Должен. Проверь, что интерфейс(ы) дуальные. Не знаешь, как — предъяви idl.
Здравствуйте VladD2, Вы писали:
VD>Здравствуйте BoikoRoman, Вы писали:
BR>>Имеется in-proc COM компонент, ... не хочет создаваться в ASP сценарии.
VD>А что при этом выдается? У нас все тоже самое работает.
Объект не может быть создан.
Привожу пример VBS файла который работает без проблем, я ожидал что этот же текст при размещении на странице тоже будет работать без проблем, но не тут то было.
'Create Object
Set ACOM = CreateObject("AmziEngineCOM.LSEAmziEngineCOM")
Dim res
'Init object
res = ACOM.Init("", "")
P.S. Кстати у меня Service Pack 4. Может в этом причина?
Здравствуйте George_Seryakov, Вы писали:
GS>Здравствуйте BoikoRoman, Вы писали:
BR>>Имеется in-proc COM компонент, выполняет массу полезных вещей и построен на основе Simple Object. Прекрасно работает в MFC приложении, но не хочет создаваться в ASP сценарии.
GS>Должен. Проверь, что интерфейс(ы) дуальные. Не знаешь, как — предъяви idl.
Привожу пример VBS файла который работает без проблем, я ожидал что этот же текст при размещении на странице тоже будет работать без проблем, но не тут то было.
'Create Object
Set ACOM = CreateObject("AmziEngineCOM.LSEAmziEngineCOM")
Dim res
'Init object
res = ACOM.Init("", "")
Из этого следует,что IDispatch компонент поддерживает.
P.S. Кстати у меня Service Pack 4. Может в этом причина?
Здравствуйте BoikoRoman, Вы писали:
BR>Привожу пример VBS файла который работает без проблем, я ожидал что этот же текст при размещении на странице тоже будет работать без проблем, но не тут то было.
BR>Из этого следует,что IDispatch компонент поддерживает.
Следует.
Попробуй в ASP Server.CreateObject вместо CreateObject. Попробуй проследить (не)создание компонента отладчиком (используй DebugBreak()). Возможно, что твой компонент пытается делать что-то не очень стандартное, что ему удается под VBS и не удается под ASP. Что?
Здравствуйте George_Seryakov, Вы писали:
GS>Здравствуйте BoikoRoman, Вы писали:
BR>>Привожу пример VBS файла который работает без проблем, я ожидал что этот же текст при размещении на странице тоже будет работать без проблем, но не тут то было.
GS>
BR>>Из этого следует,что IDispatch компонент поддерживает.
GS>Следует.
GS>Попробуй в ASP Server.CreateObject вместо CreateObject. Попробуй проследить (не)создание компонента отладчиком (используй DebugBreak()). Возможно, что твой компонент пытается делать что-то не очень стандартное, что ему удается под VBS и не удается под ASP. Что?
Какие есть ограничения на использование чего — либо в COM компонентах под ASP? Где это можно узнать?
"Нестандартное" — это работа с ядром логической машины вывода.
Компонент имеет переменную-член класса являющегося оболочкой для библиотечных функций. Этот класс как и библиотека поставляется Amzi и реализует ядро AmziProlog!
Нормально работает без COM, внутри COM но не в ASP.
Здравствуйте BoikoRoman, Вы писали:
BR>Какие есть ограничения на использование чего — либо в COM компонентах под ASP? Где это можно узнать?
Обычно про это узнается опытным путем. Вот как ты сейчас.
BR>Компонент имеет переменную-член класса являющегося оболочкой для библиотечных функций. Этот класс как и библиотека поставляется Amzi и реализует ядро AmziProlog! BR>Нормально работает без COM, внутри COM но не в ASP.
Скорее всего он и зарубает тебе инициализацию. Выясни, как именно (коды возврата? исключения?) и копай в этом направлении.
А почему переменная-член? Вроде, у Amzi есть COM object для ASP.
Здравствуйте George_Seryakov, Вы писали:
GS>Здравствуйте BoikoRoman, Вы писали:
BR>>Какие есть ограничения на использование чего — либо в COM компонентах под ASP? Где это можно узнать?
GS>Обычно про это узнается опытным путем. Вот как ты сейчас.
BR>>Компонент имеет переменную-член класса являющегося оболочкой для библиотечных функций. Этот класс как и библиотека поставляется Amzi и реализует ядро AmziProlog! BR>>Нормально работает без COM, внутри COM но не в ASP.
GS>Скорее всего он и зарубает тебе инициализацию. Выясни, как именно (коды возврата? исключения?) и копай в этом направлении.
GS>А почему переменная-член? Вроде, у Amzi есть COM object для ASP.
Более подробно.
Amzi поставляет DLL (a_mw3d.dll) с реализацией функций ядра пролог машины.
Amzi поставляет файл класса для С++, VB, компонент для Delphi.
C++ класс похож на обычную упаковку.
Внутри компонента присутствует примерно следующее:
LSEAmzi m_LSEAmziEngine;
Здравствуйте BoikoRoman, Вы писали:
BR>Здравствуйте. Есть вопрос (точнее 2). BR>Имеется in-proc COM компонент, выполняет массу полезных вещей и построен на основе Simple Object. Прекрасно работает в MFC приложении, но не хочет создаваться в ASP сценарии. Для пробы создал COM компонент на основе ActiveXServerComponent он может использоваться и в MFC приложении и в ASP сценарии. BR>Вопрос 1: Чем отличаются объекты созданные на базе Simple Object и ActiveXServerComponent. BR>Вопрос 2: Как теперь использовать имеющийся объект в ASP сценарии. BR>За ранее благодарен.
Поясню:
Объект создается на странице, выполняет вычисления. Результат оформляется и отсылается.
Код создания следующий:
<%@ Language=VBScript %>
<%
set ACOM = CreateObject("AmziEngineCOM.LSEAmziEngineCOM")
ACOM.Init "", ""
%>
P.S.: Провел эксперимент с размещением кода создания и использования на странице (взято из html файла):
<BODY>
<SCRIPT language = VBScript>
'Create Object
Dim ACOM
MsgBox "Start"
Set ACOM = CreateObject("AmziEngineCOM.LSEAmziEngineCOM")
MsgBox "CreateObject"
MsgBox ACOM.GetLastError, 0, "GetLastError"
Dim res
'Init object
res = ACOM.Init("", "")
MsgBox "Init"
</SCRIPT>
В таком сценарии объект создается и проблем по его использованию (то что в примере, на практике требуется больше) нет никаких.
Правда этот сценарий клиентский и будет выполняться на клиенте и маловероятно, что мой компонент окажется у клиента.
Мне же нужно регистрировать, создавать и использовать в серверном сценарии.