Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: интерфейсы, COM Добавлено: 28.09.10 22:23  

Автор вопроса:  Winand | Web-сайт: winandfx.narod.ru
в продолжение темы об интерфейсах http://www.vbnet.ru/forum/show.aspx?id=200889
А как же создать инстанс IDropSource или IDropTarget?
Если их IID известны
Private Const IID_IDropSource As String = "{00000121-0000-0000-C000-000000000046}"
Private Const IID_IDropTarget As String = "{00000122-0000-0000-C000-000000000046}"
то класс-айди CLSID абсолютно мне не известен. И через некоторое время поисков в инете и тыканья в программе OLEView привели к мысли, что их вообще нельзя создать с помощью CoCreateInstanse.
Кто-то что-то знает об этом всём?

Ответить

  Ответы Всего ответов: 25  

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 29.09.10 00:02
Вот вечно у тебя не все как у людей.. вечно ты с какой нибудь фигней пристаешь... :) Нет бы спросил как на кнопочке цвет задать, так нет же.. IDropSource ему подавай..

Насколько я понимаю всю эту кухню, реализации этих интерфейсов нет и быть не может.. Следовательно создать их ты тоже не можешь и вот почему:
Эти интерфейсы должны реализовывать объекты предназначенные для операций перетаскивания.. Ты сам их должен писать.. К примеру, реализацию IDropTarget должен иметь объект, который ты будешь использовать в CoLockObjectExternal для его блокировки и дальнейшей передачи в RegisterDragDrop вместе с хендлом окна-приемника. То есть при старте формы ты должен проделать все эти манипуляции с окном, чтоб система восприняла твое окно как приемник на который можно сбрасывать нечто, реализующее интерфейс IDataObject.
Если я не ошибаюсь то для перетаскивания нужны 4 интерфейса, описания их легко найти в MSDN, примеров реализации на срр и дельфях тоже вроде вроде видел..

Только вот вопрос.. нафига тебе все это?

Ответить

Номер ответа: 2
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #2 Добавлено: 29.09.10 00:29
Вопрос в том, поддерживает ли VB6 имплементацию интерфейсов?

Ответить

Номер ответа: 3
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #3
Добавлено: 29.09.10 00:48
На сколько понимаю не поддерживает. (эх опять сам себе сейчас начну советы давать:)
Тут либо TLB нужно (если не ошибаюсь оно потом вкомпилится в экзешник) пример чего (даже для idropsource) я видел сегодня тут http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=61324&lngWId=1
Либо написать реализацию в цппшной библиотеке и по запросу программы создавать инстанс и возвращать указатель. (Так вообще возможно?)
спасибо EROS, я прозрел:) искал пример того, чего не может быть, неблагодарное дело)

Ответить

Номер ответа: 4
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #4
Добавлено: 29.09.10 00:49
*Точнее получается, что vb6 поддерживает имплементацию ифейсов, но нужен тлбшник, чтобы показать что имплементим

Ответить

Номер ответа: 5
Автор ответа:
 Eugy



Вопросов: 0
Ответов: 73
 Профиль | | #5 Добавлено: 29.09.10 05:00
Так и скомпилируй tlb из отдельного *.idl безо всякой реализации.
а потом в модуле класса VB реализация: Implements ImyFace
Или я не правильно понял вопрос?

Ответить

Номер ответа: 6
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #6
Добавлено: 29.09.10 10:39
EROS пишет:
Вопрос в том, поддерживает ли VB6 имплементацию интерфейсов?

"Типа поддерживает."

Ответить

Номер ответа: 7
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #7 Добавлено: 29.09.10 11:01
Так и скомпилируй tlb из отдельного *.idl безо всякой реализации.
а потом в модуле класса VB реализация: Implements ImyFace

С имплементацией вроде понятно.. хоть и через анус, но возможность, судя по всему, есть.. А сможет ли он в 6ке получить указатель на инстанс этого имлементирующего класса? Или тоже через анус?
Может правда проще все это в cpp-шной либе сделать ему?

Ответить

Номер ответа: 8
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #8 Добавлено: 29.09.10 17:06
1. Инстанс интерфейса - нонсенс.
2. Имплементация интерфейсов поддерживается полностью, ибо COM.
3. Если получен указатель на IUnknown (для VB6 справедливо всегда), либо на любой другой интерфейс экземпляра класса, который имплементит какой-либо интерфейс - через него можно получить указатель на любой поддерживаемый классом интерфейс. Одно из основополагающих правил COM. В VB6 реализуется через простой Set.

Ответить

Номер ответа: 9
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #9
Добавлено: 01.10.10 04:09
Выяснилось, что ц++ спасет быстрее. Для решения поставленной в моей предыдущей теме задачи - перетаскивание файла ИЗ программы - оказалось достаточно такого вот кода http://pastebin.mozilla-russia.org/107138
Нагло взятого из этой статьи http://blogs.msdn.com/b/oldnewthing/archive/2004/12/06/275659.aspx
Скомпилил в dll, вызвал бейстком dragout(hwnd) и всё.

Ответить

Номер ответа: 10
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #10 Добавлено: 01.10.10 10:27
Я так и думал, что с цпп быстрее будет.. В любом случае, кроссафчег, что победил!

Ответить

Номер ответа: 11
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #11 Добавлено: 01.10.10 11:12
Если для реализации двух интерфейсов отдельная сборка на другом языке программирования - это быстрее... то я - Элеонора Рузвельт. Если лениво объявлять интерфейсы самому - есть уйма готовых tlb, наподобие olelib, где эти интерфейсы уже "заготовлены" (при этом поставляется с исходниками). Подключаешь, компилишь все в одной сборке - и никаких левых dll, по штуке на интерфейс...

Ответить

Номер ответа: 12
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #12 Добавлено: 01.10.10 12:56
есть уйма готовых tlb, наподобие olelib, где эти интерфейсы уже "заготовлены"

ну а где же ты, весь такой красивый, раньше был? Чего же не подсказал?
ТС не просил написать за него код, более того он сам перерыл пол инета в поисках инфы.. Он лишь просил подсказать как подобные вещи на VB6 сделать..
А после того, как он все сам сделал (возможно и не совсем верно) приходишь ты и говоришь, что креатиф - гавно, а афтар - ... ну ты понял.

Ответить

Номер ответа: 13
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #13 Добавлено: 01.10.10 14:08
Аффтар лишь просил подсказать как создать инстанс интерфейса. No comments.
По остальной части было сказано вполне достаточно. Осталось только
написать за него код

Ответить

Номер ответа: 14
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #14 Добавлено: 01.10.10 16:49
Winand, один вопрос.. ты понимаешь суть и назначение интерфейсов, или лучше объяснить на примерах?.. Просто понимание интерфейсов - это реально очень важный момент в ООП..

Ответить

Номер ответа: 15
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #15
Добавлено: 01.10.10 16:51
Для решения поставленной в моей предыдущей теме задачи - перетаскивание файла ИЗ программы - оказалось достаточно такого вот кода http://pastebin.mozilla-russia.org/107138

Если не секрет, а чем плох VB-шный OLEDrag?

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам