Вниз
Скачать: CL | DM;

Ипользование SHGetImageList   Найти похожие ветки 

← →
volser   (2005-12-11 15:20) [0]

Если у кого есть пример использования функции SHGetImageList в делфи, поделитесь плиз!


← →
volser   (2005-12-11 20:00) [1]

Вот моя не успешная попытка
http://all-tours.colocall.com/1.zip

Возвращает реализацию на интерфейс нормально, но методы не вызывает.
Можно ли описывать не все методы интерфейса?
После того как вызываю метод, при удалении интерфейса вылетает эксепшин.

Может кто подскажет в чем проблема?


← →
Набережных С. ©   (2005-12-11 20:43) [2]


> volser   (11.12.05 20:00) [1]


> Можно ли описывать не все методы интерфейса?

Если этот интерфейс потомок IDispatch, то можно описать его как дисинтерфейс, указав только нужные методы, и работать с этим диспинтерфейсом. Можно даже вообще не описывать, если использовать позднее связывание. В Delphi это удобнее всего делать через переменную типа OleVariant. В остальных случаях необходимо описывать все методы. Правда, если некоторые методы точно не будут использоваться, то вместо них можно вставить просто заглушки типа procedure Stub1, procedure Stub2 etc, но порядок следования и количество методов должны точно совпадать, иначе компилятор не сможет правильно произвести вызов. Я не рекомендую так делать, это чревато неприятностями, лучше потратить лишние 5-10 минут и полностью описать интерфейс. Или поискать в сети, скорее всего где-нибудь, кто-нибудь, да выложил.


← →
volser   (2005-12-11 21:51) [3]

Не интерфейс потомок IUnknown

Тогда вопрос по переводу с с++ в делфи.

CPP:
       virtual HRESULT STDMETHODCALLTYPE Add(
           HBITMAP hbmImage,
           HBITMAP hbmMask,
           int *pi) = 0;

Delphi:

function  Add(hbmImage : HBITMAP; hbmMask : HBITMAP; out pi: Integer) : HRESULT; stdcall;

Правильно ли я перевел метод, в частности инетесует параметр pi?


← →
Набережных С. ©   (2005-12-12 12:00) [4]


> volser   (11.12.05 21:51) [3]

В общем, правильно. Но по поводу параметра pi нужно смотреть IDL с описанием интерфейса, либо документации документацию. В сомнительных случаях для передаваемых по ссылке парамтров вполне допустимо использовать модификатор var. Хотя и использование out там, где необходим var, не приведет к неправильному вызову функции , но вполне может привести к неправильному результату работы метода при межпроцессном вызове.

Ну а в данном конкретном случае этот параметр описан MSDN как выходной, следовательно out - совершенно правильно


← →
Набережных С. ©   (2005-12-12 13:38) [5]

Ну раз никто не поправил, то придется самому:) В фразе "Хотя и использование out там, где необходим var, не приведет к неправильному вызову функции , но вполне может привести к неправильному результату работы метода при межпроцессном вызове" последние слова "при межпроцессном вызове" надобно выкинуть. Проблемы могут возникнуть при любой дистанции вызова, эт я малость поспешил, о своем тут в тот момент думал:))



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.034 c
15-1139569012
iZEN
2006-02-10 13:56
2006.03.05
Виртуальный принтер в TIFF/JPEG


4-1134626861
Alex_1234
2005-12-15 09:07
2006.03.05
Информация о версии в результирующем екзешнике...


15-1139838359
Arkady
2006-02-13 16:45
2006.03.05
Borland отказывается от развития Dephi и C++


2-1140356030
_shark_@list.ru
2006-02-19 16:33
2006.03.05
Уважаемые мастера, подскажите пожалуйсто, как можно прочитать из


6-1132562850
Pumpon
2005-11-21 11:47
2006.03.05
Соединение через автоматические настройки...




   Наверх