Недавно добавленные исходники

•  Animation Loaders  1 057

•  DeLiKaTeS Tetris (Тетрис)  5 990

•  TDictionary Custom Sort  7 926

•  Fast Watermark Sources  7 583

•  3D Designer  10 822

•  Sik Screen Capture  8 164

•  Patch Maker  8 350

•  Айболит (remote control)  8 401

•  ListBox Drag & Drop  7 261

•  Доска для игры Реверси  101 524

•  Графические эффекты  8 456

•  Рисование по маске  7 821

•  Перетаскивание изображений  6 415

•  Canvas Drawing  6 800

•  Рисование Луны  6 739

•  Поворот изображения  5 837

•  Рисование стержней  4 783

•  Paint on Shape  3 479

•  Генератор кроссвордов  4 500

•  Головоломка Paletto  3 621

•  Теорема Монжа об окружностях  4 409

•  Пазл Numbrix  2 860

•  Заборы и коммивояжеры  3 812

•  Игра HIP  2 582

•  Игра Go (Го)  2 595

•  Симулятор лифта  2 975

•  Программа укладки плитки  2 404

•  Генератор лабиринта  3 154

•  Проверка числового ввода  2 638

•  HEX View  3 048

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Как написать DLL, которую можно было-бы выполнить с помощью RunDll, RunDll32



Автор: Nomadic

Вы должны определить в программе вызываемую снаружи функцию.

Функция должна быть __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".

На Паскале -


function Test(
  hWnd: Integer;
  hInstance: Integer;
  lpCmdLine: PChar;
  dummy: Longint
  ): Integer; stdcall; export;
begin
  Windows.MessageBox(hWnd, lpCmdLine, 'Command Line', MB_OK);
  Result := 0;
end;

Давненько я ждал эту инфоpмацию! Сел пpовеpять и наткнулся на очень забавную вещь. А именно -- пусть у нас есть исходник на Си пpимеpно такого вида:

int WINAPI RunDll( HWND hWnd, HINSTANCE hInstance, LPCSTR lpszCmdLine, DWORD dummy );
......
int WINAPI RunDllW( HWND hWnd, HINSTANCE hInstance, LPCWSTR lpszCmdLine, DWORD dummy );
......
и .def-файл пpимеpно такого вида:
EXPORTS
RunDll
RunDllA=RunDll
RunDllW

то rundll32 становится pазбоpчивой -- под NT вызывает UNICODE-веpсию. Под 95, pазумеется, ANSI.








Copyright © 2004-2026 "Delphi Sources" by «SiteAnalyzer». Delphi World FAQ

Группа ВКонтакте