Плагины и DLL

Обсуждения программы xStartDesigner
Ответить
Colorlife
Пассажир
Сообщения: 5
Зарегистрирован: Чт июл 28, 2005 7:40 pm
Откуда: Беларусь
Благодарил (а): 0
Поблагодарили: 0

Плагины и DLL

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

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

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

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

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

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

Вот такая "беда":) Что ж делать-то?

Аватара пользователя
Alex
Ас
Сообщения: 2833
Зарегистрирован: Вт апр 05, 2005 3:28 pm
Откуда: Kaliningrad City
Благодарил (а): 2 раза
Поблагодарили: 91 раз
Контактная информация:

Сообщение Alex » Чт янв 26, 2006 4: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. Или и то и другое :). Не для себя лично радею, а для безопасности :)... Готов даже за полезный исходный код высылать лицензии на программу. Или деньгами ;).

Colorlife
Пассажир
Сообщения: 5
Зарегистрирован: Чт июл 28, 2005 7:40 pm
Откуда: Беларусь
Благодарил (а): 0
Поблагодарили: 0

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

Отправил исходники на e-mail. Может
и пригодятся :)

Аватара пользователя
Alex
Ас
Сообщения: 2833
Зарегистрирован: Вт апр 05, 2005 3:28 pm
Откуда: Kaliningrad City
Благодарил (а): 2 раза
Поблагодарили: 91 раз
Контактная информация:

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

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

В xStarter тоже можно сделать задачу, которая в определенное время покажется сообщение и этим разбудит систему. Но только из состояния Suspended, не Hibernate, когда питание компьютера отключено.

Colorlife
Пассажир
Сообщения: 5
Зарегистрирован: Чт июл 28, 2005 7:40 pm
Откуда: Беларусь
Благодарил (а): 0
Поблагодарили: 0

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

Да нет, не только из Suspend. В управлении питанием стоит птичка "использование спящего режима". И питание отключается. Т.е. комп переходит в т.н. режим S4 (hibernate). И поднимается потом. Вот.
Но может, конечно мне просто "везло" с материнками и BIOSом. Я уж не знаю.[/img]

Аватара пользователя
Romik©
Авиаконструктор
Сообщения: 263
Зарегистрирован: Пн май 16, 2005 10:05 pm
Откуда: Кольчугино
Благодарил (а): 0
Поблагодарили: 9 раз
Контактная информация:

Сообщение Romik© » Ср фев 07, 2007 8: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!

Аватара пользователя
iPasha
Авиаконструктор
Сообщения: 441
Зарегистрирован: Чт сен 08, 2005 5:05 pm
Благодарил (а): 0
Поблагодарили: 7 раз
Контактная информация:

Сообщение iPasha » Чт фев 08, 2007 12:23 am

Маньяк, блин! ;-)

Аватара пользователя
Alex
Ас
Сообщения: 2833
Зарегистрирован: Вт апр 05, 2005 3:28 pm
Откуда: Kaliningrad City
Благодарил (а): 2 раза
Поблагодарили: 91 раз
Контактная информация:

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

Привет!
Могу посоветовать лишь прислать плагин по почте, я проверю в чем может быть дело.

Ответить