Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.19;
Скачать: CL | DM;

Вниз

Совместное использование .   Найти похожие ветки 

 
tytus   (2004-12-02 16:24) [0]

Добрый день мастера. В основном модуле отображаю txt файл в память. Хочу написать dll которая бы видела этот отображенный файл, считала с него строку, и передала в основную прогу. Подскажите пожалуйста идею или куском кода.


 
Leonid Troyanovsky   (2004-12-02 22:44) [1]


> tytus   (02.12.04 16:24)  
> Добрый день мастера. В основном модуле отображаю txt файл
> в память. Хочу написать dll которая бы видела этот отображенный
> файл, считала с него строку, и передала в основную прогу.
> Подскажите пожалуйста идею или куском кода.


В dll передается PChar полученный путем MapViewOfFile,
а возвращается адрес(PChar) начала найденной строки и ее длина.
Ну, и это, конечно, в предположении, что просмотр открыт на
весь файл.

--
С уважением, LVT.


 
tytus   (2004-12-03 10:03) [2]

>LVT
Выдает AE!
library AdphSearch;

uses
 ShareMem, Windows, SysUtils, Classes;

{$R *.res}
procedure GetAdphData(const AdphFile,SearchStr:PChar;var ResultStr:PChar);stdcall;
begin
ResultStr:=StrPos(AdphFile,SearchStr);
end;

exports
 GetAdphData;

begin
end.


//Основной модуль

implementation

{$R *.dfm}
procedure GetAdphData(const AdphFile,SearchStr:PChar;
   var ResultStr:PChar);stdcall external "ADPHSEARCH.DLL";

procedure TForm1.Button1Click(Sender: TObject);
var
 s:string;
 Result:PChar;
FH:=FileOpen(OpenDialog1.FileName,fmOpenRead or fmShareDenyNone);
if FH=INVALID_HANDLE_VALUE then
raise Exception.Create("Ошибка открытия файла.");
GetFileInformationByHandle(FH,FilInfo);
FilSize:=FilInfo.nFileSizeLow+FilInfo.nFileSizeHigh;
ObjMapHandle:=CreateFileMapping(FH,0,PAGE_READONLY,0,
 FilSize,nil);
DataFileMap:=MapViewOfFile(ObjMapHandle,FILE_MAP_READ,0,0,FilSize);
 GetAdphData(DataFileMap,PChar("BAE31"),Result);
move(Result^,Pointer(s)^,62);
RE1.Lines.Add(s);//RE1-RichEdit


 
Leonid Troyanovsky   (2004-12-03 10:49) [3]


> tytus   (03.12.04 10:03) [2]

> Выдает AE!


AV (Access violation) ?

> library AdphSearch;
>
> uses
>  ShareMem, Windows, SysUtils, Classes;

В данном случае, ShareMem и не нужно.
>
> {$R *.res}
> procedure GetAdphData(const AdphFile,SearchStr:PChar;var
> ResultStr:PChar);stdcall;

В данном случае stdcall и не нужно.

> ResultStr:=StrPos(AdphFile,SearchStr);

В данном случае безопасней поиск, ограниченный по длине,
скажем, размером файла. Бо mmf здесь не ограничен #0.

> //Основной модуль

> var
>  s:string;
..
> move(Result^,Pointer(s)^,62);

Т.е., память для s будет выделять Пушкин?
Я ж говорил, нужно возвращать из dll длину строки.
Ее и пользуй в SetLength/SetString.

--
С уважением, LVT.


 
tytus   (2004-12-03 11:15) [4]

>LVT
AV конечно, ...его так..
Тогда и в главном модуле stdcall не нужно.
Про длину строки я забыл.
SetLength(s,62);
А возвращается указатель на начало строки и ровно до конца файла -- RE1.Lines.Add(Result);
Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2004.12.19;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.036 c
1-1102307317
Ivvvan
2004-12-06 07:28
2004.12.19
Интеграция c Outlook Express


1-1102157928
SMT
2004-12-04 13:58
2004.12.19
Идентификация версии Excel


14-1101999308
Denis_
2004-12-02 17:55
2004.12.19
Где скачать русско-англиский словарь?


1-1102070708
Mishenka
2004-12-03 13:45
2004.12.19
Компонент с PopupMenu


14-1101975214
Ditrix
2004-12-02 11:13
2004.12.19
психология программра