Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: COM/DCOM/ActiveX/ATL/CORBA > получение ProgID из VARIANT переменной |
Автор: RastaDja 1.11.2010, 12:48 |
Привет! помогите решить проблему: Есть структура vector<VARIANT> m_varVector. В эту структуру на стороне клиента (допустим VB) добавляем данные. В качестве данных может быть ссылка на что угодно, например: Dim xmd As DOMDocument Set xmd = New DOMDocument mcol.Add xmd Задача: получить ссылку например так IDispatch* pDispatch = NULL; pDispatch = m_varVector[item].pdispVal; и узнать ProgID элемента, который хранится в полученой нами pDispatch переменной. Надеюсь на ответы. Заранее благодарен. ![]() Добавлено через 2 минуты и 57 секунд mcol - наш тип для работы с vector<VARIANT> m_varVector Dim mcol As ATLCOLLLib.CollectVari Set mcol = New ATLCOLLLib.CollectVari |
Автор: RastaDja 1.11.2010, 14:12 | ||||||
ссылка это просто элемент в векторе. Тобиш это любой обьект, которих хранится в VARIANT переменной. ССылка никак не представлена, мы просто получаем его
Мне надо сохранить мой вектор в файле. данные ссылок надо сохранить так, чтоб при загрузки файла все обьекты востановились, для этого мне надо ProgID, потому, что это удобно для скриптовых языков и более читабельно. Добавлено через 1 минуту и 21 секунду ...потому, что это удобно для скриптовых языков и более читабельно чем CLSID |
Автор: xvr 1.11.2010, 14:22 | ||||
Судя по примеру это все же не 'любой элемент', а конкретно IDispatch
Вам в любом случае понадобится поддержка со стороны сохраняемых объектов. См. в сторону IPersistStream (и др. IPersis* интерфейсов), и в сторону IMoniker
|
Автор: RastaDja 1.11.2010, 14:41 | ||
Спасибо за ответ. Попробую поискать в сторону PersistStream и т.п. Эсли можно какойто пример, буду оч благодарен Добавлено через 6 минут и 20 секунд Плюс есть проблема в том, что не все обьекты поддерживают IPersist* интерфейсы. А предполагается сохранение всех данных.
пока есть такой код. но как получить данные о конкретном коклассе а не о всех |
Автор: xvr 1.11.2010, 16:34 |
IDispatch вполне может на GetTypeInfo вернуть UNIMPLEMENTED ![]() Надежно - никак. |
Автор: RastaDja 1.11.2010, 17:49 | ||
на данный момент решение такое
но почемуто в зависимости от обьэкта получаю ответ либо Msxml2.DOMDocument - правельный для Msxml2.DOMDocument либо StdFont - не правельный для stdole.StdFont не понимаю в чём проблема |
Автор: xvr 1.11.2010, 18:39 |
Видимо stdole.StdFont делегировал свое сохранение StdFont'у. Через IPersistStream можно слить все состояние объекта, не вдаваясь в его CLSID или ProgID. По идее можно будет и восстановить |
Автор: RastaDja 2.11.2010, 14:50 |
ладно, спасибо за помощь |
Автор: RastaDja 3.11.2010, 09:19 |
Все нормально, StdFont, как и stdole.StdFont создаётся нормально Set f = CreateObject("StdFont") ну а данные буду писать через IPersistStream |