Вопрос по IDL - передача параметров
От: Xenon_IPC  
Дата: 27.01.05 23:35
Оценка:
Please help me!!! Это уже крик о помощи от всей души. Перелазил весь инет, но так и не смог получить ответы. Собственно говоря есть 2 основных вопросика:
1) Есть код:
//File classDef.h
class A : public IA { /*здесь что-то, неважно что*/} ;
class B : public IB {
HRESULT func(/*[out]*/ A *obj);
};

//File classDef.idl
...
[ object, uuid(...), helpstring...
]
interface IA { .... };

[object, uuid(...), ...
]
interface IB {
HRESULT func( ???? ); //Как правильно объявить???!!!
//А то компилятор не видет class A

};
...
Вот в этом собственно и вопрос: как правильно объявить функцию func интерфейса IВ в IDL файле, если указатель на класс A передается в качестве параметра функции?
2) У меня есть класс в котором перегружены две ф-ции оператора равенства:
class A {
HRESULT operator=(class D);
HRESULT operator=(class E);
};
Можно ли описать эти ф-ции в IDL и если можно то как? (Дело в том, что компилятор ругается на "operator"). Да, и я знаю, что перегружать ф-ции в IDL нельзя, но можно в IDL указать разные имена, а потом эти имена с помощью макросов привязать к одной функции в cpp. Если можно в 2-х словах как это сделать.

Заранее всем откликнувшимся ОЧЕНЬ благодарен!!! Было б крайне не плохо если б кто-то смог бы со мной связаться по аське 110327515 или e-mail: xenon@inpas.com.ua (я в интернете целый день), т. к. общаться через форум немного неудобно и затруднительно. Еще раз ОГРОМНОЕ спасибо! Мне действительно нужна ваша помощь.

P.S. Да, и еще маленькие вопросик: можно ли в IDL организовать передачу аргумента по ссылке, типа: HRESULT func(int &a); ? И если можно, то как записать это в IDL?
Re: Вопрос по IDL - передача параметров
От: Tom Россия http://www.RSDN.ru
Дата: 28.01.05 09:02
Оценка:
1. В COM обьекты не передаються никогда. Могут передаваться только указатели на интерфейс.
2. Операторы естественно в IDL описать нельзя.
3. [in, out] long* pVal (типа int в IDL не существует)
Народная мудрось
всем все никому ничего(с).
Re[2]: Вопрос по IDL - передача параметров
От: Аноним  
Дата: 28.01.05 09:20
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>1. В COM обьекты не передаються никогда. Могут передаваться только указатели на интерфейс.


Как же тогда быть?! Как мне реализовать в COM тогда ф-цию в которой надо передать указатель на класс?! (как я приводил пример) Очень надо. Все остальное я кое-как смог обойти, хотя мне не совсем нравятся те методы которые я нашел, но вот это надо реализовать обязательно. Ведь можно в передавать указатели на структуры или объединения!
//В IDL

typedef struct myStruct
{
long lVal;
} MYSTRUCT;

HRESULT func(MYSTRUCT *obj);

Знаю что есть директивы #import и #include. Может как-то можно отталкиваясь от этого? Правда, я уже все перепробовал, но безрезультатно Компилятор очень сопротивляется и все отвергает.
Впервые столкнулся с такой проблемой, которую не могу решить
Re[3]: Вопрос по IDL - передача параметров
От: Tom Россия http://www.RSDN.ru
Дата: 28.01.05 13:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Tom, Вы писали:


Tom>>1. В COM обьекты не передаються никогда. Могут передаваться только указатели на интерфейс.


А>Как же тогда быть?! Как мне реализовать в COM тогда ф-цию в которой надо передать указатель на класс?! (как я приводил пример) Очень надо. Все остальное я кое-как смог обойти, хотя мне не совсем нравятся те методы которые я нашел, но вот это надо реализовать обязательно. Ведь можно в передавать указатели на структуры или объединения!

А>//В IDL

А>typedef struct myStruct

А>{
А> long lVal;
А>} MYSTRUCT;

А> HRESULT func(MYSTRUCT *obj);


А>Знаю что есть директивы #import и #include. Может как-то можно отталкиваясь от этого? Правда, я уже все перепробовал, но безрезультатно Компилятор очень сопротивляется и все отвергает.

А>Впервые столкнулся с такой проблемой, которую не могу решить

1. Если компонент — inproc, то можешь вообще обьявить параметр void* и передавать всё, что хочешь.
2. Если компонент — inproc, то можешь передавать указатель на интерфейс, а на сервере кастить к самому обьекту
3. Если всё таки маршалинг присуствует — можно реализовать маршалинг по значению (MVB), и опять же кастить к классу
Народная мудрось
всем все никому ничего(с).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.