Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2014, 12:30   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Радость DLL, COM. Как создать методы вызваемые из того же VBScript?

Доброго времени суток!

Написал некое расширение IE, последний штрих - контекстное меню. Надо создавать HTML, а в нем скрипт который дергает COMофский метод некой DLL.

Почему-то этот метод не вызывается. почему?

Код:
type
  TMySuperCOM = class(TComObject, IDispatch, IOleCommandTarget,
    IObjectWithSite)
  private
    fIBrowser: IWebBrowser2;
    fDoc: IHTMLDocument2;
    fIObject: IInterface;
    fITarget: IOleCommandTarget;
  public
    // IDispatch
    function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
    function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
    function GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer;
      DispIDs: Pointer): HResult; stdcall;
    function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word;
      var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
    // IOleCommandTarget
    function QueryStatus(CmdGroup: PGUID; cCmds: Cardinal; prgCmds: POleCmd;
      CmdText: POleCmdText): HResult; stdcall;
    function Exec(CmdGroup: PGUID; nCmdID, nCmdexecopt: DWORD; const vaIn: OleVariant;
      var vaOut: OleVariant): HResult; stdcall;
    // IObjectWithSite
    function SetSite(const pUnkSite: IUnknown): HResult; stdcall;
    function GetSite(const riid: TIID; out site: IUnknown): HResult; stdcall;
    
//А вот мой суперский метод, который не работает!
function Msg(aMsg: OleVariant): HResult; stdcall;
  end;

  TBHOFactory = class(TComObjectFactory)
  private
    procedure InstallRegistryKey;
    procedure RemoveRegistryKey;
  public
    procedure UpdateRegistry(Register: Boolean); override;
  end;
Регистрация:
Код:
initialization

begin
  InitialiseShellType;
  ComServer.PerUserRegistration := False; // )
  //Class_Interf: TGUID     = '{86AD1872-2523-460E-8289-10F56B25AD7D}';
  TBHOFactory.Create(ComServer, TMySuperCOM, Class_Interf,
    'IeSuperBHO',
    'IE Test BHO', ciMultiInstance,
    tmApartment);
end;
Регистрирую через RegSvr32, все работает как надо. Но пункт в контекстном меню сайта не работает.

Вызывается такой HTML:
Код:
<SCRIPT language="VBScript">
On Error Resume Next
set SO = CreateObject("<ЧТО ПИСАТЬ ЗДЕСЬ?>")
if err<>0 then
  MsgBox("ActiveX automation object placed in IETEST.DLL is not registered or corrupted.")
else
  call SO.Msg(external.menuArguments.document.title)
end if
</SCRIPT>
Скрипты выполняется, но метод Msg не вызывается. Что я делаю не так?
Человек_Борща вне форума Ответить с цитированием
Старый 01.02.2014, 13:14   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
CreateObject("IeSuperBHO")
Судя по всему.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.02.2014, 15:09   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Нет, не получается. пробовал и просто ClassName и DLLName.ClassName и ничего.
Человек_Борща вне форума Ответить с цитированием
Старый 01.02.2014, 15:22   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

так вы в реестре то нашли чего зарегили?
eval вне форума Ответить с цитированием
Старый 01.02.2014, 15:51   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Зарегистрирован DLLName.ClassName. Скрипт выполняется, метод не вызывает, отладчик не даже не заходит в вызываемый метод.
Человек_Борща вне форума Ответить с цитированием
Старый 01.02.2014, 16:37   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

по клсиду пробовали?
eval вне форума Ответить с цитированием
Старый 01.02.2014, 16:52   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Пробовал. Метода Msg не находит и все тут.
Человек_Борща вне форума Ответить с цитированием
Старый 01.02.2014, 20:47   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
отладчик не даже не заходит в вызываемый метод.
А он случайно в настройках безопасности не залочен? Есть у меня одна такая прожка-дурка использующая ActiveX. Требует для запуска только IE и с полным доступом и максимально попушенной безопасностью.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.02.2014, 21:10   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

нет, все нормально. В методах наследуемых интерфейсов отладчик работает)
Человек_Борща вне форума Ответить с цитированием
Старый 01.02.2014, 21:15   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

вы пробовали в тестовом проекте смотреть? кому то фиолетово кто его юзает
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать простейшую программу с использованием DLL inna_matuashova Помощь студентам 5 04.11.2011 15:48
Как создать плагин (DLL) для готового приложения Elentari C# (си шарп) 2 19.10.2011 21:15
Несколько DLL. Использование одного и того же подуля. Selestis Lazarus, Free Pascal, CodeTyphon 1 07.01.2011 13:25
создать таблицу с подстановкой данных с листов того же файла Jlia Microsoft Office Excel 1 02.08.2010 21:39
создать таблицу подстановкой столбцов со 100 листов того же файла EvgeniyaZ Microsoft Office Excel 4 16.05.2010 00:51