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;
Как
написать DLL, которую можно было-бы выполнить с помощью RunDll, RunDll32?
Из советов 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) {
Давненько я ждал эту информацию! Сел проверять и наткнулся на очень забавную вещь. А именно – пусть у нас есть исходник на Си п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.
Продукты третьих фирм
Adobe
Читаем Adobe Acrobat PDF файлы из нашего приложения
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:
TPdf = class(TOleControl)
private
FIntf: _DPdf;
function GetControlInterface: _DPdf;
protected
procedure CreateControl;
procedure InitControlData; override;
public
function LoadFile(const fileName: WideString): WordBool;