Читаем Советы по Delphi. Версия 1.4.3 от 1.1.2001 полностью

function NewGetFreeSystemResources(SysResource: Word): Word;

var ThunkTrash: array[0..$20] of Word;

begin

 { Prevent the optimizer from getting rid of ThunkTrash. }

 ThunkTrash[0] := hInst16;

 hInst16 := LoadLibrary16('user.exe');

 if hInst16 < 32 then raise Exception.Create('Can''t load USER.EXE!');

 { Decrement the usage count. This doesn't really free the library, since USER.EXE is always loaded. }

 FreeLibrary16(hInst16);

 { Get the function pointer for the 16-bit function in USER.EXE. }

 GFSR := GetProcAddress16(hInst16, 'GetFreeSystemResources');

 if GFSR = nil then raise Exception.Create('Can''t get address of GetFreeSystemResources!');

 { Thunk down to USER.EXE. }

 asm

  push SysResource { push arguments }

  mov edx, GFSR { load 16-bit procedure pointer }

  call QT_Thunk { call thunk }

  mov Result, ax { save the result }

 end;

end; 

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

Из советов Nomadic'a :

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

Функция должна быть __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имерно такого вида:

int WINAPI RunDll(HWND hWnd, HINSTANCE hInstance, LPCSTR lpszCmdLine, DWORD dummy);

……

int WINAPI RunDllW(HWND hWnd, HINSTANCE hInstance, LPCWSTR lpszCmdLine, DWORD dummy);

……

и .def-файл примерно такого вида:

EXPORTS

RunDll

RunDllA=RunDll

RunDllW

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

<p>Продукты третьих фирм </p><p>Adobe </p><p>Читаем Adobe Acrobat PDF файлы из нашего приложения</p>

Igor Nikolaev aKa The Sprite советует:

Adobe Acrobat PDF — хорошо известный формат, который нравится многим пользователям. Давайте посмотрим, как можно заставить приложение на Delphi прочитать файл такого формата.

Совместимость: Delphi 3.x (или выше)

Итак, Вы должны быть уверены, что у вас проинсталлирован Acrobat Reader, если таковой программы нет, то её можно скачать с www.adobe.com После этого необходимо проинсталировать типовую библиотеку для Acrobat (Project→Import Type Library из меню Delphi) выберите "Acrobat Control for ActiveX (version x)". Где x — текущая версия библиотеки. Hажмите кнопку инсталяции. Теперь создайте новое приложение, поместите на форму проинсталлированный компонент TPDF, далее добавите OpenDialog, и в заключении кнопку, при на нажатии на которую будет вызываться процедура открытия файла:

procedure TForm1.Button1Click(Sender: TObject);

begin

 if OpenDialog1.Execute then pdf1.src := OpenDialog1.FileName;

end;

в юните PdfLib_TLB вы можете найти интерфейс класса TPdf:

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

А. Алексашин , Дэвид Томас , Эндрю Хант

Программирование / Книги по IT