![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Guest_Андрей |
|
|||
|
Unregistered |
Привет. Помогите создать DLL, которую можно выполнить в командной строке. Пример не помешает.
|
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
А кто её выполнять будет? У dll нет "точки входа", следовательно обычный запуск как EXE с DLL сделать нельзя, т.е. имеется ввиду что DLL будет запускать другая программа - ну так в чём проблема - пишешь любую DLL, а так же программу которая будет распознавать функции твоей DLL и ассоциируешь DLL с твоей программой. Ничего выходящего за рамки создания самой что ни на есть стандартной DLL и программы её вызова здесь нет. Если ты хочешь чтобы DLL запускалась какой-то определённой программой, то желательно бы указать какой, телепатов тут вроде как нет.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Guest_Андрей |
|
|||
|
Unregistered |
Скорее всего запуск с помощью Rundl32
|
|||
|
||||
| [auxx] |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 148 Регистрация: 2.2.2003 Репутация: нет Всего: нет |
Вот, нашел в каком-то факе:
Вы должны определить в программе вызываемую снаружи функцию. Функция должна быть __stdcall (или WINAPI, что то же самое ;)) и иметь четыре аргумента. Первый - HWND окна, порождаемого rundll32 (можно использовать в качестве owner'а своих dialog box'ов), второй - HINSTANCE задачи, третий - остаток командной строки (LPCSTR, даже под NT), четвертый - не знаю ;). Hапример, int __stdcall __declspec(dllexport) Test ( HWND hWnd, HINSTANCE hInstance, LPCSTR lpCmdLine, DWORD dummy ) { MessageBox(hWnd, lpCmdLine, "Command Line", MB_OK); return 0; } === rundll32 test.dll,_Test@16 this is a command line === выдаст message box со строкой "this is a command line". |
|||
|
||||
| Dapo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 18.4.2002 Репутация: нет Всего: 1 |
Vit, как это у длл нет точки входа? А что такое DllEntryPoint?
|
|||
|
||||
| [auxx] |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 148 Регистрация: 2.2.2003 Репутация: нет Всего: нет |
Это разные вещи. Если я не ошибаюсь, DLLEntryPoint выполняется при загрузке ДЛЛ системой, но это самая обычная ф-ция, которой через стек передаются параметры (в отличие от ехе, там через регистры). DllEntryPoint возвратит значение, но после етого ДЛЛ ведь не выгружается (в отличие от ехе). |
|||
|
||||
| Unregistered |
|
|||
|
Unregistered |
Если не жалко и есть время, переведите этот код на Делфи, а то я с СИ не очень дружу.
|
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
DllEntryPoint вызавется в четырех случаях:
1. Загрузка в адресное пространство процеса. 2. Выгрузка из адресного пространства процеса. 3. При появлении новой нитки в процесе. 4. При удалении нитки из процеса. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
перевод:
function Test(hWnd, hInstance: Integer; lpCmdLine: PChar; dummy: Integer): Integer; stdcall; begin MessageBox(hWnd, lpCmdLine, "Command Line", MB_OK); Result := 0; end; ======= rundll32 test.dll,Test this is a command line Это сообщение отредактировал(а) cully - 3.2.2003, 21:06 -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| Guest_Андрей |
|
|||
|
Unregistered |
Спасибо.
А как привязать строку, прописанную в реестре: C:\WINDOWS\rundll32.exe shell32.dll,Control_RunDLL %1,%* ...к запуску своего CPL файла? |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Свой CPL файл будет запускаться без проблем без всяких изменений в реестре
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Guest_Андрей |
|
|||
|
Unregistered |
Мой CPL не хочет запускатся, если щелкнуть по нему правой кнопкой мышки и выбрать пункт "Открыть с помощью Панели Управления", а Майкрософтские аплеты запускаються.
|
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Похоже что неправильно написан.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Guest_Андрей |
|
|||
|
Unregistered |
Написан правильно! Вот:
|
|||
|
||||
| Guest_Андрей |
|
|||
|
Unregistered |
Так что? Не знаем
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |