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?
1. В COM обьекты не передаються никогда. Могут передаваться только указатели на интерфейс.
2. Операторы естественно в IDL описать нельзя.
3. [in, out] long* pVal (типа int в IDL не существует)
Здравствуйте, Tom, Вы писали:
Tom>1. В COM обьекты не передаються никогда. Могут передаваться только указатели на интерфейс.
Как же тогда быть?!

Как мне реализовать в COM тогда ф-цию в которой надо передать указатель на класс?! (как я приводил пример) Очень надо. Все остальное я кое-как смог обойти, хотя мне не совсем нравятся те методы которые я нашел, но вот это надо реализовать обязательно. Ведь можно в передавать указатели на структуры или объединения!
//В IDL
typedef struct myStruct
{
long lVal;
} MYSTRUCT;
HRESULT func(MYSTRUCT *obj);
Знаю что есть директивы #import и #include. Может как-то можно отталкиваясь от этого? Правда, я уже все перепробовал, но безрезультатно

Компилятор очень сопротивляется и все отвергает.
Впервые столкнулся с такой проблемой, которую не могу решить
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, 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), и опять же кастить к классу