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

•  DeLiKaTeS Tetris (Тетрис)  4 256

•  TDictionary Custom Sort  6 299

•  Fast Watermark Sources  6 096

•  3D Designer  9 011

•  Sik Screen Capture  6 414

•  Patch Maker  6 832

•  Айболит (remote control)  6 816

•  ListBox Drag & Drop  5 693

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

•  Графические эффекты  7 031

•  Рисование по маске  6 327

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

•  Canvas Drawing  5 574

•  Рисование Луны  5 279

•  Поворот изображения  4 830

•  Рисование стержней  3 419

•  Paint on Shape  2 671

•  Генератор кроссвордов  3 557

•  Головоломка Paletto  2 852

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

•  Пазл Numbrix  2 392

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

•  Игра HIP  2 033

•  Игра Go (Го)  1 959

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

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

•  Генератор лабиринта  2 477

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

•  HEX View  2 492

•  Физический маятник  2 108

 
скрыть

  Форум  

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

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



Delphi Sources

Расшаренная DLL



Автор: Xavier Pacheco

{
Copyright © 1999 by Delphi 5 Developer's Guide - Xavier Pacheco and Steve Teixeira
}

library ShareLib;

uses
  ShareMem,
  Windows,
  SysUtils,
  Classes;
const

  cMMFileName: PChar = 'SharedMapData';

{$I DLLDATA.INC}

var
  GlobalData: PGlobalDLLData;
  MapHandle: THandle;

  { GetDLLData will be the exported DLL function }

procedure GetDLLData(var AGlobalData: PGlobalDLLData); stdcall;
begin
  { Point AGlobalData to the same memory address referred to by GlobalData. }
  AGlobalData := GlobalData;
end;

procedure OpenSharedData;
var
  Size: Integer;
begin
  { Get the size of the data to be mapped. }
  Size := SizeOf(TGlobalDLLData);

  { Now get a memory-mapped file object. Note the first parameter passes
    the value $FFFFFFFF or DWord(-1) so that space is allocated from the system's
    paging file. This requires that a name for the memory-mapped
    object get passed as the last parameter. }

  MapHandle := CreateFileMapping(DWord(-1), nil, PAGE_READWRITE, 0, Size,
    cMMFileName);

  if MapHandle = 0 then
    RaiseLastWin32Error;
  { Now map the data to the calling process's address space and get a
    pointer to the beginning of this address }
  GlobalData := MapViewOfFile(MapHandle, FILE_MAP_ALL_ACCESS, 0, 0, Size);
  { Initialize this data }
  GlobalData^.S := 'ShareLib';
  GlobalData^.I := 1;
  if GlobalData = nil then
  begin
    CloseHandle(MapHandle);
    RaiseLastWin32Error;
  end;
end;

procedure CloseSharedData;
{ This procedure un-maps the memory-mapped file and releases the memory-mapped
  file handle }
begin
  UnmapViewOfFile(GlobalData);
  CloseHandle(MapHandle);
end;

procedure DLLEntryPoint(dwReason: DWord);
begin
  case dwReason of
    DLL_PROCESS_ATTACH: OpenSharedData;
    DLL_PROCESS_DETACH: CloseSharedData;
  end;
end;

exports
  GetDLLData;

begin
  { First, assign the procedure to the DLLProc variable }
  DllProc := @DLLEntryPoint;
  { Now invoke the procedure to reflect that the DLL is attaching
    to the process }
  DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
Скачать весь проект




Похожие по теме исходники

DLL Form

DLL in Resources

DLL Injector




Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

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