Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
HomeStudio Гость
|
Добавлено: Вт Фев 24 2004 15:48 Заголовок сообщения: COM + ATL + VC6. |
|
|
Господа, пишу COM объекты, используя ATL. Как известно, интерфейсы там описываются на IDL. Так вот, например,
HRESULT MyStuff ([in] int, [out, string] LPCSTR*);
Работает, и возвращает строкую. Все мои попытки возвратить массив строк не увенчались успехом, т.е. [out, string] LPCSTR** не работает (но компилится).
Да и вообще, как возвращать свой тип данных, например, структуры?
Спасибо за помощь!
Дмитрий. |
|
Вернуться к началу |
|
|
Леша
Зарегистрирован: 18.03.2004 Сообщения: 8
|
Добавлено: Вт Мар 23 2004 16:47 Заголовок сообщения: |
|
|
Необходимо определить в IDL свою структуру, а в методе- передать массив из структуры при помощи слов
max_is(Last) или size_is(Last):
typedef struct TMP
{ short DEL;
BSTR FullName;
long lngAGE;
}TMP;
HRESULT Metod1_My([in]long Last,[in,out,max_is(Last)]TMP Test1[]);
HRESULT Metod2_My([in]long Last,[in,out,size_iss(Last)]TMP Test2[]); |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Вт Мар 23 2004 19:54 Заголовок сообщения: |
|
|
структуры - это хорошо, но если нужны строки, работай с BSTR. Их ведь не просто так придумали. |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Вт Мар 23 2004 19:57 Заголовок сообщения: Леша, тебе. |
|
|
А что можешь сказать по поводу проблеммы, описанной в теме "Знатокам COM". Заранее спасибо. |
|
Вернуться к началу |
|
|
Леша
Зарегистрирован: 18.03.2004 Сообщения: 8
|
Добавлено: Ср Мар 24 2004 12:22 Заголовок сообщения: |
|
|
Замени
hr = pICF->CreateInstance(NULL, IID_ISend, (void**)&pIS);
hr=pIS->GetAllLocks();
hr=pICF->LockServer(TRUE);
Попробуй посмотреть на результаты hr ,который возвращает метод,если все ОК, то hr=0. При других значениях - ошибка при работе метода, для справки по коду ошибки смотри VS в
Tools->Error Lookup.
Вставь значение hr и глянь , что оно значит. |
|
Вернуться к началу |
|
|
Леша
Зарегистрирован: 18.03.2004 Сообщения: 8
|
Добавлено: Ср Мар 24 2004 12:33 Заголовок сообщения: |
|
|
Для возврата массива строк:
необходимо в IDL передать и вернуть массив строк BSTR при помощи слов
max_is(Last) или size_is(Last).
А long Last определяет длину массива.
HRESULT Metod1_My([in]long Last,[in,out,max_is(Last)]BSTR Test1[]);
HRESULT Metod2_My([in]long Last,[in,out,size_iss(Last)]BSTR Test2[]); |
|
Вернуться к началу |
|
|
|