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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2014, 21:51   #11
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

DLL работает только в IE.
Для меню(главного) ничего сложного нет. IOleComadTarget + IObjectWithSite.
Эта часть работает нормально, отладчик так же работает в этих методах.

Контекстное меню, тут сложнее.
пункт меню вызывает скрипт, в котором создается ссылка на ActiveX и вызываются методы этого ActiveX объекта. Вот так переписал скрипт:
Код:
<SCRIPT language="Javascript">
try {
var BHO = new ActiveXObject("IEBHO.IeSuperBHO");
    } catch (e) {
        alert('Error BHO');
    }
var win = external.menuArguments.window;
var doc = external.menuArguments.document;
BHO.Msg(doc.title);
</SCRIPT>
но при получении экземпляра ActiveX, в этом скрипте, происходит ошибка.
Человек_Борща вне форума Ответить с цитированием
Старый 01.02.2014, 21:56   #12
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

при чем тут длл?
что показывает alert(е);
eval вне форума Ответить с цитированием
Старый 01.02.2014, 22:10   #13
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
при чем тут длл?
что показывает alert(е);
Из DLL надо вызвать метод, просто хотя бы вызвать.
alert(e) показывает [Object error]
Человек_Борща вне форума Ответить с цитированием
Старый 01.02.2014, 22:22   #14
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Из DLL надо вызвать метод, просто хотя бы вызвать.
вы не поняли, для того чтобы понять в чем прикол при создании ActiveX не важно ваша длл или не ваша, да и длл ли тоже не важно, вы можете в любом тестовом проекте это проделать и смотреть что к чему

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

Попробовал:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  x: OleVariant;
begin
  x := CreateOleObject('IEBHO.IeSuperBHO');
  x := x;
  x.Msg('Привет!');
end;
Пишет, что не поддерживается.
Человек_Борща вне форума Ответить с цитированием
Старый 01.02.2014, 22:50   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не поддерживается.
Ха!. Так значит Msg() либо приватен, либо модель скомпилированной DLL не подходит для таких вызовов. Я столкнулся с этим, когда свой ActiveX делал, там есть различия моделей СОМ сервера. Я правда не помню какие именно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.02.2014, 22:54   #17
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Вот догнал, создал интерфейс с методом Msg, теперь код:
Код:
type
  IBHOCommand= interface(IUnknown)
    ['{55834FFF-E179-4A7A-919B-17472AB3589C}']
    function Msg(aMsg: WideString): HResult; stdcall;
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  x: IBHOCommand;
begin
  x := CreateComObject(Class_Interf) as IBHOCommand;
  x.Msg('Привет!');
end;

Работает. А вот в скрипте по-прежнему Object Error.
Человек_Борща вне форума Ответить с цитированием
Старый 01.02.2014, 23:09   #18
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
создал интерфейс
я что-то не понял... а как вы собирались работать с комом?
eval вне форума Ответить с цитированием
Старый 01.02.2014, 23:13   #19
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

eval, браузер дергает JavaScript код, который должен дергать мой IBHOComand, и этого не происходит.
Код:
<SCRIPT language="Javascript">
try {
var BHO = new ActiveXObject("IEBHO.MySuperIE")
    } catch (e) {
        alert(e.message); //Валит сюда и все тут
		return;
    }
var win = external.menuArguments.window;
var doc = external.menuArguments.document;
BHO.Msg(doc.title); //Метод из IBHOComand
</SCRIPT>
Человек_Борща вне форума Ответить с цитированием
Старый 01.02.2014, 23:46   #20
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

разобрался, есть сервер OLE, есть сервер COM. Контекстное меню нужно делать через Ole.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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