Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Последовательный доступ к MMF [D7, XP]


Страницы:   1 2

Muxa/Ibl4 ©   (2009-07-14 22:12:00) 

Уважаемые коллеги, прошу помочь в реализации.

Что_имеем:2 программы(или более) на одном компе, каждая имеет некую DLL(по сути это одна библиотечка просто для портативности для каждой проги нужна копия DLL).

Что_нуна:Реализовать в DLL механизм чтения/записи данных в MMF (можно последовательный - но не обязательно).

Что_получилось:получилось реализовать 2 приложения работающие с DLL, и саму DLL. Но проблема в том что если 1приложение работает со совей копией DLL то 2 уже не может работать со своей.

Как быть? Если кто то швырнет в меня примером библиотечки (желательно с возможность последовательного доступа) - то я буду очень счастливым человеком.


Loginov Dmitry   (2009-07-14 22:44:00) [21]

Это именно говнокод. Все верно.

Здесь
http://www.delphimaster.ru/cgi-bin/forum.pl?n=6&id=1247596906
можно в целях изучения MMFпосмотреть, что когда-то предлагали Тейксера и Пачека.


Игорь Шевченко   (2009-07-14 22:42:00) [22]

program files\borland\bds\x.0\demos\DelphiWin32\vclwin32\IPCDemos\*.*


Muxa/Ibl4   (2009-07-14 22:36:00) [23]

Вот подобие моего говнокода

library DllMmfDate;
uses
 ShareMem,
 SysUtils,
 windows,
 md5 in 'md5.pas';

type
   User = record
sName : string;
iId :   integer;
   end;
   
   aUser = array of User;

   Command = record
sTitle : string;
iId:     integer;
   end;

   aCommand = array of Command;

   info = record
ListUser : aUser;
       ListCommand: aCommand;
   end;
   

   tinfo = ^info;

var

 SendMMF: THandle;
 SendData: PChar;

const
 NameAreaForWwork = 'trulala';

function writeMMF ( param : info ) : boolean;
var
 rw : tinfo;
begin
 if (MapViewOfFile(SendMMF, FILE_MAP_WRITE, 0, 0, 0) = nil ) then Begin
   SendMMF := CreateFileMapping( $FFFFFFFF, Nil, PAGE_READWRITE, 0, SizeOf(DWORD), NameAreaForWwork);
 end;

 rw := MapViewOfFile(SendMMF, FILE_MAP_WRITE, 0, 0, 0);
 rw^ := param;

 Result :=true;
end;

function readMMF() : tinfo;
begin
 if ( MapViewOfFile(SendMMF, FILE_MAP_READ, 0, 0, 0) = nil ) then Begin
     SendMMF := CreateFileMapping( $FFFFFFFF, Nil, PAGE_READWRITE, 0, SizeOf(DWORD), NameAreaForWwork);
 end else begin
     SendMMF := OpenFileMapping(FILE_MAP_READ, False, NameAreaForWwork);
 end;

     Result := MapViewOfFile(SendMMF, FILE_MAP_READ, 0, 0, 0);
end;

function addUser( sUserName, iIdUser : PChar ): PChar; stdcall;
var
 r : info;
 rp : tinfo;

 aUsers : aUser;
begin
 rp := readMMF();
 r := rp^;

 aUsers := r.aUser;

 setLength(termW, Length(aUsers)+1);
 termW[Length(aUsers)-1].sName := sUserName;
 termW[Length(aUsers)-1].terminalName := iIdUser;

 r.aUser := aUsers;

 writeMMF( r );

 //.........

 Result := 'тут текстовый результ';
end;

function getUserAll(): aUser; stdcall;
var
 r : info;
 rp : tinfo;
begin
 rp := readMMF();
 r := rp^;
 Result := r.aUser;
end;

exports    addUser, getUserAll;
begin
end.


Muxa/Ibl4   (2009-07-14 22:36:00) [24]

Долго объяснять но так требуют великие боги.


Юрий Зотов   (2009-07-14 22:31:00) [25]

Не понял насчет копий DLL. Почему каждый EXE не может загрузить одну и ту же DLL и с ней работать?


Loginov Dmitry   (2009-07-14 22:29:00) [26]

Отсутствует наиболее важное:
Как пытался получить


Rouse_   (2009-07-14 22:14:00) [27]


> если 1приложение работает со совей копией DLL то 2 уже не
> может работать со своей.

SHARE_ права выставилил при открытии?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо