Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Контекстное меню проводника delphi XE2, Под x64  
V
    Опции темы
ZBugz
  Дата 10.9.2011, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Вот на основе этого http://forum.vingrad.ru/topic-167526.html
Или может кто нибудб поумней подскажет как сделать по x32 и уже под новый x64
А то у меня под x64 ругается  на 
Код

TContextMenu = class(TComObject, IShellExtInit, IContextMenu)

PM MAIL   Вверх
ZBugz
Дата 11.9.2011, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Кстати, забыл сказать, примера под EX2 стандратного в samples больше нету... Иль я его не нашел...
PM MAIL   Вверх
CodeMonkey
Дата 12.9.2011, 20:56 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(ZBugz @  10.9.2011,  20:40 Найти цитируемый пост)
А то у меня под x64 ругается  на


Как именно ругается - предлагается угадать?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
ZBugz
Дата 13.9.2011, 07:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Цитата(CodeMonkey @ 12.9.2011,  20:56)
Цитата(ZBugz @  10.9.2011,  20:40 Найти цитируемый пост)
А то у меня под x64 ругается  на


Как именно ругается - предлагается угадать?

ОЙ  smile 
[DCC Error] ContextM.pas(9): E2291 Missing implementation of interface method IContextMenu.GetCommandString
PM MAIL   Вверх
CodeMonkey
Дата 14.9.2011, 00:11 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Наверное, в IContextMenu поменяли типы. Ну, там, было Integer, стало NativeInt. Сравни, что написано в объявлении IContextMenu и что написано у тебя в реализации. Исправь.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
ZBugz
Дата 16.9.2011, 07:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Цитата(CodeMonkey @ 14.9.2011,  00:11)
Наверное, в IContextMenu поменяли типы. Ну, там, было Integer, стало NativeInt. Сравни, что написано в объявлении IContextMenu и что написано у тебя в реализации. Исправь.

А причему тут типы и т.д., ругается в начале
Код

unit ContextM;

interface

uses
  Windows, ActiveX, ComObj, ShlObj;

type
  TContextMenu = class(TComObject, IShellExtInit, IContextMenu) <-тута

PM MAIL   Вверх
CodeMonkey
Дата 16.9.2011, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



При том.

Что если у GetCommandString другой тип в прототипе, то это значит что у тебя в классе нет варианта GetCommandString, который требуется для IContextMenu. Вот он тебе и указывает на это: в классе нет нужного метода GetCommandString для IContextMenu - это в чистом виде перевод сообщения об ошибке (Missing implementation of interface method IContextMenu.GetCommandString).

А то, что метод имеет имя GetCommandString, ничего не значит. В конце концов, метод можно делегировать - откуда компилятору знать, что ты хотел сделать. Он не видит нужного метода - он об этом сказал.

У тебя метод объявлен с 32-х битным параметром, а для x64 требуется 64-х битный.

Это сообщение отредактировал(а) CodeMonkey - 16.9.2011, 07:41


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
ZBugz
  Дата 16.9.2011, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Блин, я тогда не понял что и где писать и что исправить  smile Я че то тупой тут....
У тебя нету нормального кода для интеграции в контекствное меню ? Что бы и x86 и x64 работало... ? smile 

Это сообщение отредактировал(а) ZBugz - 16.9.2011, 09:17
PM MAIL   Вверх
CodeMonkey
Дата 16.9.2011, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



*facepalm*

Ctrl + click на IContextMenu!

И видим:
Код
  IContextMenu = interface(IUnknown)
    [SID_IContextMenu]
    function QueryContextMenu(Menu: HMENU;
      indexMenu, idCmdFirst, idCmdLast, uFlags: UINT): HResult; stdcall;
    function InvokeCommand(var lpici: TCMInvokeCommandInfo): HResult; stdcall;
    function GetCommandString(idCmd: UINT_PTR; uFlags: UINT; pwReserved: PUINT;
      pszName: LPSTR; cchMax: UINT): HResult; stdcall;
  end;


Т.е. в твоём TContextMenu должно быть:
Код
function GetCommandString(idCmd: UINT_PTR; uFlags: UINT; pwReserved: PUINT; pszName: LPSTR; cchMax: UINT): HResult; stdcall;


Что не понятно? Уж три раза сказал.




--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
ZBugz
  Дата 16.9.2011, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Я в этом ниче понять не могу все равно...
Теперь ругается на uType..
Код

function GetCommandString(idCmd: UINT_PTR; uFlags: UINT; pwReserved: PUINT;
     pszName: LPSTR; cchMax: UINT): HResult;
begin
  Result := S_OK;
  if uType = GCS_HELPTEXT then
    case idCmd of
      0:
      begin
        StrCopy(pszName, 'Small LanGet');
      end
      else
        Result := E_INVALIDARG
    end
end;

Раньше он обявлен был, а зас нет... И че ему присвоить ?!

Добавлено через 1 минуту и 27 секунд
Заменить на uFlags  чтоли ?
PM MAIL   Вверх
CodeMonkey
Дата 16.9.2011, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Да.

Добавлено через 32 секунды
P.S. Как можно отвечать, не видя твой код? Ты спрашиваешь, как исправить, но не показываешь, что исправлять надо.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
ZBugz
  Дата 16.9.2011, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Заменил на Заменить на uFlags  чтоли, работает smile

Добавлено @ 14:41
Ура, теперь на x64 контекстное меню заработало smile 
Спасибо smile 

З.Ы. А ссылка на код в самом первом посте smile 

Это сообщение отредактировал(а) ZBugz - 16.9.2011, 14:42
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0542 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.