Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблема вызова метода COM объекта из VB
|
|||
|---|---|---|---|
|
#18+
Помогите решить проблему. Я написал на С++ COM объект и при попытке вызвать его метод из VB, возникает ошибка. Выдается сообщение о том что несответсвуют типы танных. На С++ метод объявлен так: STDMETHOD(RunService)(BSTR ServiceName, int* ErrorCode); Из VB вызываю так Dim ObjServCtrl As Object Dim Err As Integer Set ObjServCtrl = CreateObject("Servctrl.ServController") ObjServCtrl.RunService TextNameSrv.Text, Err Проблема возникает со вторым параметром (Err). Что здесь не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 10:18 |
|
||
|
Проблема вызова метода COM объекта из VB
|
|||
|---|---|---|---|
|
#18+
Предполагаю, что программированием COM-объектов вы занялись недавно. 1. Для точной диагностики проблемы было бы замечательно, если бы Вы представили также и описание интерфейса, реализуещего метод RunService, из соответствующего файла IDL. Можно было бы понять, что Вы хотели. 2. В отсутствие IDL могу лишь предположить, что ошибка по делу: аргумент метода *ErrorCode имеет тип int (размерность 4 байта), а клиент подсовывает ему тип Integer (размерность 2 байта). Попробуйте поменять тип переменной Err в коде клиента VB на тип Long ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 10:38 |
|
||
|
Проблема вызова метода COM объекта из VB
|
|||
|---|---|---|---|
|
#18+
Предполагаю, что программированием COM-объектов вы занялись недавно. 1. Для точной диагностики проблемы было бы замечательно, если бы Вы представили также и описание интерфейса, реализуещего метод RunService, из соответствующего файла IDL. Можно было бы понять, что Вы хотели. 2. В отсутствие IDL могу лишь предположить, что ошибка по делу: аргумент метода *ErrorCode имеет тип int (размерность 4 байта), а клиент подсовывает ему тип Integer (размерность 2 байта). Попробуйте поменять тип переменной Err в коде клиента VB на тип Long to Dominic Программированием COM-объектов занимаюсь примерно 1,5года, использую С++, Delphi А на VB впервые в жизни пытаюсь написать программу. Вам спасибо. Ваш совет помог. Поменял в VB тип на Long и все заработало. А вот IDL interface IServController : IDispatch { [id(1), helpstring("method RunService")] HRESULT RunService(BSTR ServiceName, [out] int* ErrorCode); [id(2), helpstring("method StopService")] HRESULT StopService(BSTR ServiceName, [out] int* ErrorCode); }; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 14:35 |
|
||
|
Проблема вызова метода COM объекта из VB
|
|||
|---|---|---|---|
|
#18+
Ничего личного. Просто имя переменной ErrorCode напомнило мне мои собственные попытки освоить передачу ошибок из компонентов в клиентскую программу. Если Вы действительно таким способом извещаете клиента об ошибке - не сочтите за оскорбление совет потратить время на изучение поддержки компонентом интерфейса ISupportErrorInfo и передачей кода ошибки через возвращаемое методом компонента значение HRESULT. Поверьте, сэкономите уйму времени, а если Ваш компонент будет использовать другой программист из VB - то еще и уйму нервов. Взгляните, например, на мой код метода компонента, поддерживающего ISupportErrorInfo: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. При поддержке ISupportErrorInfo в компоненте становится доступен вызов его функции Error, возвращающей HRESULT, который Вы лично собираете с помощью макроса MAKE_HRESULT. Третий аргумент этого макроса может быть объявлен где-нибудь в MyError.h: Код: plaintext 1. 2. 3. 4. 5. 6. А код клиента на VB может использовать стандартный обработчик ошибок, например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Обратите внимание, что в обработчике ошибок VB доступны и код ошибки, который Вы собираете при помощи MAKE_HRESULT, и символьная строка описания ошибки, которую Вы задаете в качестве первого аргумента метода Error в компоненте. При этом способ обработки ошибок в VB становится стандартным С наилучшими пожеланиями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 08:51 |
|
||
|
Проблема вызова метода COM объекта из VB
|
|||
|---|---|---|---|
|
#18+
to Dominic Большое спасибо за хороший совет. Согласен, что Вы посоветовали более лучший (правильный) способ обработки ошибок. Для меня есть смысл разобраться с таким методом, и в дальнейшем применять его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 11:20 |
|
||
|
|

start [/forum/topic.php?fid=20&msg=32544816&tid=1439061]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 364ms |

| 0 / 0 |
