У меня есть 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(...)
Зараннее благодарен.
Здравствуйте, 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-а
Здравствуйте, 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;
Все равно выеживается
_>_>[
_> 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 зарезирвированное ключевое слово
Здравствуйте, 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, или не указывать скобки