COM объект, возвращаемые значения методов, проблема

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

COM объект, возвращаемые значения методов, проблема

Сообщение AHTOXA » 24.08.2005 (Ср) 15:00

Привет всем.
Проблема такая:
есть некоторый COM объект написанный на C++, есть библиотека типов для данного объекта:
[
object,
uuid(A4C780FE-9EB9-4d2c-B632-407454A340BF),
oleautomation,
helpstring("IPpyView interface")
]
interface IPpyView : IUnknown {
HRESULT _stdcall Init([in] BSTR pFilt);
HRESULT _stdcall InitIteration();
HRESULT _stdcall NextIteration([out] BSTR pItem);
};

Как видно из примера, методы возвращают HRESULT.
Как получить это значение в бейсике??? Если я указываю:

if ppy_view.InitIteration() = S_OK then
end if

Компилятор ругается на этот вызов.
Bandit

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.08.2005 (Ср) 15:19

HRESULT VB сам преобразовывает в исключения.
On error goto
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 24.08.2005 (Ср) 15:24

А если мой метод возвращает либо S_OK, либо S_FALSE, то как быть???
Bandit

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 24.08.2005 (Ср) 15:25

Передавать указатель на возвращаемое значение?
Bandit

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.08.2005 (Ср) 15:30

Неотрицательные HRESULT, вроде бы, никак не различить. Они все сводятся к состоянию "нет ошибки"
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.08.2005 (Ср) 15:31

Да, примерно так.

Но нафига так делать?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.08.2005 (Ср) 15:32

AHTOXA писал(а):А если мой метод возвращает либо S_OK, либо S_FALSE, то как быть???

Писать обёртку, иначе никак :-|

Если от библиотеки есть исходники - тогда да, объявить параметр [out,retval] и результат класть туда.
Изображение

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 24.08.2005 (Ср) 15:34

Библиотеку писал я сам, так что придется ее ковырять :(
Ладно, тем не менее, спасибо за скорый ответ
Bandit

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Re: COM объект, возвращаемые значения методов, проблема

Сообщение codemaster » 24.08.2005 (Ср) 15:53

AHTOXA писал(а):Как получить это значение в бейсике??? Если я указываю:

if ppy_view.InitIteration() = S_OK then
end if

Компилятор ругается на этот вызов.



забавная библиотека :lol: :lol:
попробуй так
Код: Выделить всё
     On Error Resume Next
        ppy_view.InitIteration()
           If Err = 0 then
            .....             
           end if

//<-
Mit freundlichen Grüßen
//->

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 24.08.2005 (Ср) 15:59

А она типа тестовая и я из нее только маленький кусочек привел :)
Типа есть программа (огромная). И надо, через COM обеспечить доступ к инструментам верхнего уровня. Чтобы можно было с помощью VB делать надстройки разные.
А вообще это уродство, преобразовывать автоматом возвращаемое значение :(.
Ладно, это все оффтоп, тему можно считать закрытой.
Bandit

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 24.08.2005 (Ср) 16:17

AHTOXA писал(а):А она типа тестовая и я из нее только маленький кусочек привел :)
Типа есть программа (огромная). И надо, через COM обеспечить доступ к инструментам верхнего уровня. Чтобы можно было с помощью VB делать надстройки разные.
А вообще это уродство, преобразовывать автоматом возвращаемое значение :(.
Ладно, это все оффтоп, тему можно считать закрытой.


Библиотеку эту писал чел ничего не понимающий в COM :lol:
посоветуй ему почитать книжку по COM особенно раздел
где описывается что есть HRESULT в COM


можеш написать примерно так и будет тебе щастье !
Код: Выделить всё

HRESULT InitIteration([out, retval] VARIANT_BOOL* );

'далее  в VB
if ppy_view.InitIteration()  then

end if
//<-
Mit freundlichen Grüßen
//->

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 24.08.2005 (Ср) 16:22

Спасиб. В COM я правдо плохо шарю, пару дней назад за это дело взялся :)
Bandit


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 140

    TopList