Enum и VB?
От: dead_ricky  
Дата: 14.07.04 08:43
Оценка:
У меня есть COM-объект — сервер, в той же библиотеке типов (если я правильно выражаюсь) обьявлено перечисление:

[
    uuid(52AA40D6-BE66-479c-80E3-719984DB5B03),
    v1_enum,
    helpstring("enum for ServiceDo")
]
typedef enum WHATTODO
{
    STOP        = 1,
    PAUSE        = 2,
    CONTINUE    = 3
} WHATTODO;


У COM-обьекта есть метод, где это перечисление используеться:

[id(3), helpstring("method ServiceDo")] HRESULT ServiceDo([in] BSTR ServiceName, [in] WHATTODO todo);


Пытаюсь использовать этот метод в VBA под EXCEL'ем:

Sub DoItWithService(todo As WHATTODO)
    Dim depend() As String
    Dim size As Long
    
    On Error GoTo ErrorView
    If Not o Is Nothing Then
        ' VB выеживается!!! Говорит так писать нельзя! 
        if todo = STOP then
            depend = o.EnumDependentServices(ActiveCell.Text, size)
            If size > 0 Then
                ' ля-ля-ля
            End If
        End If
        ' И тут тоже VB выеживаеться, выдает какую-то ошибку! 
        ' Если же вместо todo поставить STOP или PAUSE то все равно выеживаеться!
        o.ServiceDo(ActiveCell.Text, todo)
    End If
ErrorView:
    MsgBox Err.Description
End Sub


Ну и следовательно вопрос: Как в этом <вырезано цензурой> VB вызвать метод ServiceDo(...)
Зараннее благодарен.
Re: Enum и VB?
От: Tom Россия http://www.RSDN.ru
Дата: 14.07.04 08:57
Оценка:
Здравствуйте, dead_ricky, Вы писали:

_>У меня есть COM-объект — сервер, в той же библиотеке типов (если я правильно выражаюсь) обьявлено перечисление:


_>
_>[
_>    uuid(52AA40D6-BE66-479c-80E3-719984DB5B03),
_>    v1_enum,
_>    helpstring("enum for ServiceDo")
_>]
_>typedef enum WHATTODO
_>{
_>    STOP        = 1,
_>    PAUSE        = 2,
_>    CONTINUE    = 3
_>} WHATTODO;
_>


_>У COM-обьекта есть метод, где это перечисление используеться:


_>
_>[id(3), helpstring("method ServiceDo")] HRESULT ServiceDo([in] BSTR ServiceName, [in] WHATTODO todo);
_>


_>Пытаюсь использовать этот метод в VBA под EXCEL'ем:


_>
_>Sub DoItWithService(todo As WHATTODO)
_>    Dim depend() As String
_>    Dim size As Long
    
_>    On Error GoTo ErrorView
_>    If Not o Is Nothing Then
_>        ' VB выеживается!!! Говорит так писать нельзя! 
_>        if todo = STOP then
_>            depend = o.EnumDependentServices(ActiveCell.Text, size)
_>            If size > 0 Then
_>                ' ля-ля-ля
_>            End If
_>        End If
_>        ' И тут тоже VB выеживаеться, выдает какую-то ошибку! 
_>        ' Если же вместо todo поставить STOP или PAUSE то все равно выеживаеться!
_>        o.ServiceDo(ActiveCell.Text, todo)
_>    End If
_>ErrorView:
_>    MsgBox Err.Description
_>End Sub
_>


_>Ну и следовательно вопрос: Как в этом <вырезано цензурой> VB вызвать метод ServiceDo(...)

_>Зараннее благодарен.


У тебя tag и имя равны. Это плохо. И ещё укажи на всякий атрибут public, для enum-а
Народная мудрось
всем все никому ничего(с).
Re[2]: Enum и VB?
От: dead_ricky  
Дата: 14.07.04 09:16
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>У тебя tag и имя равны. Это плохо. И ещё укажи на всякий атрибут public, для enum-а


Сделал:
[
    uuid(52AA40D6-BE66-479c-80E3-719984DB5B03),
    v1_enum,
    helpstring("enum for ServiceDo")
]
typedef [public] enum WHATTODO
{
    STOP        = 1,
    PAUSE        = 2,
    CONTINUE    = 3
} EWHATTODO;


Все равно выеживается
Re[3]: Enum и VB?
От: Tom Россия http://www.RSDN.ru
Дата: 14.07.04 09:38
Оценка:
_>
_>[
_>    uuid(52AA40D6-BE66-479c-80E3-719984DB5B03),
_>    v1_enum,
public,
_>    helpstring("enum for ServiceDo")
_>]
_>typedef enum WHATTODO
_>{
_>    DOSTOP        = 1,
_>    DOPAUSE        = 2,
_>    DOCONTINUE    = 3
_>} EWHATTODO;
_>


STOP — в VB зарезирвированное ключевое слово
Народная мудрось
всем все никому ничего(с).
Re: Enum и VB?
От: Vi2 Удмуртия http://www.adem.ru
Дата: 14.07.04 10:12
Оценка: +1
Здравствуйте, dead_ricky, Вы писали:

d_r>        ' VB выеживается!!! Говорит так писать нельзя! 

        if todo = WHATTODO.STOP then

Нужно полное указание.

d_r>        ' И тут тоже VB выеживаеться, выдает какую-то ошибку! 
d_r>        ' Если же вместо todo поставить STOP или PAUSE то все равно выеживаеться!

        Call o.ServiceDo(ActiveCell.Text, todo)
или
        o.ServiceDo ActiveCell.Text, todo

Нужно или указывать ключевое слово Call, или не указывать скобки
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.