Плагины и DLL

Обсуждения программы xStartDesigner

Плагины и DLL

Сообщение Colorlife » Ср янв 25, 2006 5:36 pm

Вот пробовал создать свой плагин.
Подключаю функцию из своего DLL.
Я так понимаю, что когда дело доходит до вызова этой функции, DLL грузится, функция выполняется и DLL выгружается. Так?

Моя функция (в DLL которая) создает поток, в котором создает
таймер (Timer := CreateWaitableTimer(NIL, FALSE, NIL);) и затем
ожидает его срабатывания (WaitForSingleObject(Timer, INFINITE);
). После срабатывания таймера поток уничтожается.

Все это я "заморочил" для того, чтобы сделать WakeUp из спящего режима.

Использую эту DLL в своей программке (которая не выгружает DLL пока работает). Комп просыпается. Программка продолжает нормально работать дальше. Пробовал на разных машинах.

Подключаю DLL к xStarter ( в плагине). Создаю задачу, которая по горячим клавишам запускает действие, описанное в плагине (т.е. устанавливает таймер на включение), запускаю ее и усыпляю компьютер.
В заданное время комп просыпается, но xStarterа в памяти больше нет. Вылетает :(

Вот такая "беда":) Что ж делать-то?
Colorlife
Пассажир
 
Сообщения: 5
Зарегистрирован: Чт июл 28, 2005 3:40 pm
Откуда: Беларусь
Поблагодарил раз:
Благодарностей: раз в форуме теме

Сообщение Alex » Чт янв 26, 2006 1:20 am

При создании плагинов функции из DLL берутся по некоторому аналогу статической линковки в Delphi. Для каждой задачи создается программа-скрипт, по завершении которой все библиотеки осовбождаются...

Могу попробовать сделать динамическую линковку, именно так в Delphi явно загружаются/высвобождаются библиотеки, под полным контролем :). Но только не получится полный аналог Delphi, нельзя будет вызывать функции с параметрами.

Пример:

Код: Выделить всё
DllHandle: DWORD;
begin
  DllHandle:=LoadLibrary('mydll.dll');
  try
    ExecuteDllProcedure(DllHandle, 'MyProcedure');
  finally
    FreeLibrary(DllHandle);
  end;
end;


Второй вариант по использованию функций сторонних библиотек/проограмм - вызов методов COM серверов. Например, как в действии ExcelMacro.

Ну и третий - я могу включить Ваш код в состав программы. Для меня желательно конечно иметь именно исходный код, а не DLL. Или и то и другое :). Не для себя лично радею, а для безопасности :)... Готов даже за полезный исходный код высылать лицензии на программу. Или деньгами ;).
Аватара пользователя
Alex
Ас
 
Сообщения: 2592
Зарегистрирован: Вт апр 05, 2005 11:28 am
Поблагодарил раз:
Благодарностей: раз в форуме теме

Сообщение Colorlife » Чт янв 26, 2006 12:24 pm

Отправил исходники на e-mail. Может
и пригодятся :)
Colorlife
Пассажир
 
Сообщения: 5
Зарегистрирован: Чт июл 28, 2005 3:40 pm
Откуда: Беларусь
Поблагодарил раз:
Благодарностей: раз в форуме теме

Сообщение Alex » Чт янв 26, 2006 1:28 pm

Судя по исходникам, все эти функции в xStarter уже есть :). Ваша программа ведь может пробудить систему только из состояния Suspended?

В xStarter тоже можно сделать задачу, которая в определенное время покажется сообщение и этим разбудит систему. Но только из состояния Suspended, не Hibernate, когда питание компьютера отключено.
Аватара пользователя
Alex
Ас
 
Сообщения: 2592
Зарегистрирован: Вт апр 05, 2005 11:28 am
Поблагодарил раз:
Благодарностей: раз в форуме теме

Сообщение Colorlife » Чт янв 26, 2006 3:36 pm

Да нет, не только из Suspend. В управлении питанием стоит птичка "использование спящего режима". И питание отключается. Т.е. комп переходит в т.н. режим S4 (hibernate). И поднимается потом. Вот.
Но может, конечно мне просто "везло" с материнками и BIOSом. Я уж не знаю.[/img]
Colorlife
Пассажир
 
Сообщения: 5
Зарегистрирован: Чт июл 28, 2005 3:40 pm
Откуда: Беларусь
Поблагодарил раз:
Благодарностей: раз в форуме теме

Сообщение Romik© » Ср фев 07, 2007 5:48 pm

Привет, Алекс!

Подскажи пожалуйста. У меня функция в Run Script возвращает некую структуру, назовём её TObjectInfo

Type
TObjectInfo = record
FindWnd: Boolean;
WHandle: LongWord;
WWidth: Integer;
WHeight: Integer;
WTop: Integer;
WLeft: Integer;
WIsIconic: Boolean;
WIsWindowEnabled: Boolean;
WIsWindowVisible: Boolean;
WIsZoomed: Boolean;
WIsTOPMOST: Boolean;
end;

Иногда данные возвращаются, а иногда "Out Of Stack Range". Писать функции, которые будут по отдельности возвращать мне нужные параметры - не есть гуд... Что посоветуешь?
Экономте электроэнергию, выключайте Num Lock!
Аватара пользователя
Romik©
Авиаконструктор
 
Сообщения: 263
Зарегистрирован: Пн май 16, 2005 6:05 pm
Откуда: Кольчугино
Поблагодарил раз:
Благодарностей: раз в форуме теме

Сообщение iPasha » Ср фев 07, 2007 9:23 pm

Маньяк, блин! ;-)
Аватара пользователя
iPasha
Авиаконструктор
 
Сообщения: 427
Зарегистрирован: Чт сен 08, 2005 1:05 pm
Поблагодарил раз:
Благодарностей: раз в форуме теме

Сообщение Alex » Чт фев 08, 2007 1:24 am

Привет!
Могу посоветовать лишь прислать плагин по почте, я проверю в чем может быть дело.
Аватара пользователя
Alex
Ас
 
Сообщения: 2592
Зарегистрирован: Вт апр 05, 2005 11:28 am
Поблагодарил раз:
Благодарностей: раз в форуме теме


Вернуться в Обсуждения

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1