Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

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

01.01.2007

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

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

Oleg Moroz

(2:5020/701.22)

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;

Akzhan Abdulin

(2:5040/55)

   Давненько я ждал эту инфо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чивой -- под HТ вызывает UNICODE-веpсию. Под

95, pазумеется, ANSI. Rulez.

Alexey A Popoff

pvax@glas.apc.org, posp@ccas.ru

https://www.ccas.ru/~posp/popov/pvax.html

(2:5020/487.26)Администрирование