|
|
|
Как вернуть _Collection из COM-объекта?
|
|||
|---|---|---|---|
|
#18+
Привет все. Есть DLL, сделанная с помощью ATL. Надо, чтобы функция возвращала VB-шную коллекцию, т.е. чтобы из VB было видно: Property Get colFunc() As Collection. В классе пишу #import "msvbvm60.dll" no_namespace. Коллекции доступны. В .idl: importlib("msvbvm60.dll") ... [propget, id(1), helpstring("property colPorts")] HRESULT colPorts([out, retval] _Collection** pVal); Ругается: error C2061: syntax error : identifier '_Collection' Есть у кого идеи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 00:39 |
|
||
|
Как вернуть _Collection из COM-объекта?
|
|||
|---|---|---|---|
|
#18+
_Collection не является стандартным типом в языке описания интерфесов. Видимо, придётся через варианты и указатели... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 08:43 |
|
||
|
Как вернуть _Collection из COM-объекта?
|
|||
|---|---|---|---|
|
#18+
А разве возвращать можно только стандартные типы IDL? Вот что глаголет MSDN: Ask Dr. GUI #45Dear Dr. GUI, How do I return an ADO recordset from a method in a VC++ COM object? Jim Hocking Dr. GUI replies: Returning an ADO recordset from C++ requires that you tweak your IDL a bit. Inside the library section, add the following line as the last importlib statement: importlib("C:\Program Files\Common Files\System\ado\msado15.dll"); (Of course, modify the path to suit your system.) This will give you a declaration of, among other things, _Recordset. Once you have this declaration, you can write the IDL for a method that returns a _Recordset: [id(1), helpstring("Get Recordset")] HRESULT GetRs([in] BSTR strQuery, [out,retval] _Recordset **ppRs); Чем коллекция хуже набора записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 10:09 |
|
||
|
Как вернуть _Collection из COM-объекта?
|
|||
|---|---|---|---|
|
#18+
Ок, уболтал :) Тогда так: При импорте importlib("msvbvm60.dll") должны сгенерится tlh и tli в tlh должно быть описание '_Collection' а похоже, что его там нет (может синтаксис другой...) ищи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 13:04 |
|
||
|
Как вернуть _Collection из COM-объекта?
|
|||
|---|---|---|---|
|
#18+
Ан есть! msvbvm60.tlh: struct __declspec(uuid("a4c46780-499f-101b-bb78-00aa00383cbb")) _Collection : IDispatch ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 13:24 |
|
||
|
Как вернуть _Collection из COM-объекта?
|
|||
|---|---|---|---|
|
#18+
Народ безмолвствует... Видать не судьба... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 22:04 |
|
||
|
Как вернуть _Collection из COM-объекта?
|
|||
|---|---|---|---|
|
#18+
А кто ж за меня вставит #include "msvbvm60.tlh"?! :) И #import тогда не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 23:38 |
|
||
|
Как вернуть _Collection из COM-объекта?
|
|||
|---|---|---|---|
|
#18+
Не-е, опять гоню. #import "msvbvm60.dll" no_namespace в StdAfx.h и importlib("msvbvm60.dll") в .idl. Вот всё, что надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2004, 00:13 |
|
||
|
Как вернуть _Collection из COM-объекта?
|
|||
|---|---|---|---|
|
#18+
Так заработало или нет? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2004, 10:08 |
|
||
|
Как вернуть _Collection из COM-объекта?
|
|||
|---|---|---|---|
|
#18+
Да ни фига не заработало. Т.е. компилируется уже нормально. И в VB-шном браузере объектов всё пристойно выглядит. Но смарт-пойнтер на Collection не хочет зараза работать! Это прокатывает нормально: _CollectionPtr spCol; spCol.CreateInstance(__uuidof(Collection)); Но как доходит до первого же spCol->, так сразу кирдык. Делаю всё совершенно аналогично вышеприведённому примеру с рекордсетом. В чём грабли, не понимаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2004, 15:47 |
|
||
|
Как вернуть _Collection из COM-объекта?
|
|||
|---|---|---|---|
|
#18+
Рекордсет-то нормально в бейсик выдаётся! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2004, 15:49 |
|
||
|
Как вернуть _Collection из COM-объекта?
|
|||
|---|---|---|---|
|
#18+
Visual Basic For Applications - какая-то неправильная библиотека. В ней наверно неправильные компоненты. OLE Viewer ругается, что библиотека не зарегистрирована. Но VB же с ней работает! Ничего не понимаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2004, 17:41 |
|
||
|
Как вернуть _Collection из COM-объекта?
|
|||
|---|---|---|---|
|
#18+
авторВ ней наверно неправильные компоненты. ("это неправильные пчёлы") Да, я уже слышал, народ на VBA жалуется. То, что VB его понимает - может быть фичность самого VB. (а может и нет...) Может они там для каких-нить целей код подправили в VBA, к примеру, для быстроты/простоты/ещё_чего-то в VB и VB с VBA теперь друг друга хорошо понимают, а остальные их нет. Кстати, когда я с ними работал, такое впечатление у меня было (может просто у меня руки кривые). Вооот... Поэтому, 2 варианта: Либо чё-то не так в Вашей проге. Либо VBA глючит и придётся Вам выкручиваться какими-то обходными всякими способами (с глюками бороться). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2004, 11:30 |
|
||
|
Как вернуть _Collection из COM-объекта?
|
|||
|---|---|---|---|
|
#18+
автор("это неправильные пчёлы") Да, я уже слышал, народ на VBA жалуется. То, что VB его понимает - может быть фичность самого VB. (а может и нет...) Может они там для каких-нить целей код подправили в VBA, к примеру, для быстроты/простоты/ещё_чего-то в VB и VB с VBA теперь друг друга хорошо понимают, а остальные их нет. Похоже на то. авторКстати, когда я с ними работал, такое впечатление у меня было (может просто у меня руки кривые). У меня такого впечатления до недавних пор не было. Либо чё-то не так в Вашей проге. Уж не знаю. С другими библиотеками нормально. Тогда пришлось бы признать, что и в OLE/COM Viewer чё-то не так. Либо VBA глючит и придётся Вам выкручиваться какими-то обходными всякими способами (с глюками бороться). А именно: взять и написать на VC свои собственные коллекции. Что и было сделано. Благодарю за участие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2004, 12:10 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32492958&tid=2035061]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
66ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 230ms |
| total: | 420ms |

| 0 / 0 |
