![]() |
![]() ![]() ![]() ![]() |
|
Как написать DLL, которую можно было-бы выполнить с помощью RunDll, RunDll32Delphi , Файловая система , DLL и PlugInsКак написать 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". На Паскале -
Давненько я ждал эту инфо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. Как написать DLL, которую можно было бы выполнить с помощью RunDll и RunDll32, определив в программе вызываемую снаружи функцию __stdcall с четырьмя аргументами: HWND окна, HINSTANCE задачи, LPCSTR остаток командной строки и DWORD dummy. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш :: Главная :: DLL и PlugIns ::
|
|||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | |||||