Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
Shamonya
0 / 0 / 0
Регистрация: 05.11.2010
Сообщений: 32
#1

Что такое указатель на фаил в делфи, как его получить и с чем его готовить - Delphi

09.05.2011, 20:32. Просмотров 1031. Ответов 3
Метки нет (Все метки)

У меня вопрос я получаю имя файла вот тут
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button5Click(Sender: TObject);
var f_name:string;
begin
  forceCurrentDirectory:=true;
  if opendialog1.Execute then
    f_name:=opendialog1.filename
  else
    begin
      showMessage('Не выбран файл') ;
      exit;
    end;
  Memo1.Lines.AddStrings(open((f_name)));
end;
тут же запускаю вот эту процедуру в dll
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function Open (f_name:String): TStrings; stdcall; overload;
var
  fff:textfile;
  l:string;
begin
  Result := TStringList.Create;
  Result.Clear;
  assignfile(fff,f_name);
  reset(fff);
  while not eof(fff) do begin
    readln(fff,l);
    Result.Add(l);
 
  end;
end;
Мне препод заставил переделать чтоб в процедуру передавалось не имя файла а указатель, а я ваще не е*у чё это такое, может ктонить поможет?)

Добавлено через 5 часов 45 минут
Мне завтра лабу сдать уже нада, откликнитесь ктонить)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2011, 20:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что такое указатель на фаил в делфи, как его получить и с чем его готовить (Delphi):

Что такое Delphi, и с чем его едят?? - Delphi
Всем привет, А какие бывают проекты в Delphi??

Как из dll получить указатель формы приложения и развернуть его из панели задач? - Delphi
Доброго времени суток. Помогите, как из dll обратиться к приложению, из которого её запустили. А конкретно надо получить указатель на...

Как из dll получить указатель формы приложения и развернуть его из панели задач? - Delphi
Всем доброго времени суток. Как из dll получить указатель формы приложения и развернуть его из панели задач? Собственно всё ясно. Код...

Как удалить указатель в CheckListBox и все его строки? - Delphi
Добрый вечер! Как удалить указатель в CheckListBox и все его строки? // добавил строку и указатель. К примеру var s:integer;...

Сжатие изображения форматов, поддерживающихся в OpenPictureDialog и сохранение его в фаил. - Delphi
Народ помогите разобратся новечку, интерент перрерыл, а вразумительного ответа на свой вопрос так и не нашел... Проблема такая: Создаю...

Что такое Делфи? - Delphi
привет

3
Mawrat
12794 / 5701 / 672
Регистрация: 19.09.2009
Сообщений: 8,807
09.05.2011, 20:57 #2
Может имеется в виду файловая переменная? Тогда в вызывающем коде выполняй AssignFile(F), переменную F передавай в качестве параметра в функцию DLL. Потом при возврате управления из функции DLL, закрывай файл CloseFile(F).
---
Или вот через файловый указатель (Handle):
Вызывающий код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.Button2Click(Sender: TObject);
var
  FHandle : Integer;
  Fn : String;
begin
 
  //...
 
  FHandle := FileOpen(Fn, fmOpenRead);
  Memo1.Lines.AddStrings(Open(FHandle));
  FileClose(FHandle);
 
  //...
end;
Код функции Open() в DLL:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
function Open(FHandle : Integer) : TStrings; stdcall;
var
  S : String;
  Len : Integer;
begin
  Result := TStringList.Create;
  Len := FileSeek(FHandle, 0, soFromEnd);
  FileSeek(FHandle, 0, soFromBeginning);
  SetLength(S, Len);
  FileRead(FHandle, Pointer(S)^, Len);
  Result.Text := S;
end;
1
Shamonya
0 / 0 / 0
Регистрация: 05.11.2010
Сообщений: 32
10.05.2011, 10:12  [ТС] #3
Во спс , скорее всего это то что мне надо

Добавлено через 2 минуты
а как переделать сохранение, хендл я получил допустим
вот процедура сохранения
Delphi
1
2
3
4
5
6
7
8
procedure Save (text:TStrings;file_name:string); stdcall; overload;
 
begin
 
text.SaveToFile(File_name);
 
 
end
0
Mawrat
12794 / 5701 / 672
Регистрация: 19.09.2009
Сообщений: 8,807
10.05.2011, 12:00 #4
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
function Open(const FHandle : Integer) : TStrings;
var
  S : String;
  Len : Integer;
begin
  Result := TStringList.Create;
  Len := FileSeek(FHandle, 0, soFromEnd);
  SetLength(S, Len);
  FileSeek(FHandle, 0, soFromBeginning);
  FileRead(FHandle, Pointer(S)^, Len);
  Result.Text := S;
end;
 
procedure Save(aSl : TStrings; const FHandle : Integer);
var
  S : String;
  Len : Integer;
begin
  S := aSl.Text;
  Len := Length(S);
  FileSeek(FHandle, 0, soFromBeginning);
  FileWrite(FHandle, Pointer(S)^, Len);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  Od : TOpenDialog;
  FHandle : Integer;
begin
  Od := OpenDialog1;
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath(ParamStr(0))
  ;
  if not Od.Execute then Exit;
  if not FileExists(Od.FileName) then begin
    MessageDlg('Файл с указанным именем не найден. Действие отменено', mtWarning, [mbOK], 0);
    Exit;
  end;
 
  FHandle := FileOpen(Od.FileName, fmOpenRead + fmShareDenyWrite);
  if FHandle = -1 then begin
    MessageDlg('Не удалось открыть файл.', mtError, [mbOK], 0);
    Exit;
  end;
  Memo1.Lines := Open(FHandle);
  FileClose(FHandle);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  Sd : TSaveDialog;
  FHandle : Integer;
begin
  Sd := SaveDialog1;
  if Sd.InitialDir = '' then
    Sd.InitialDir := ExtractFilePath(ParamStr(0))
  ;
  if not Sd.Execute then Exit;
  if FileExists(Sd.FileName) then begin
    case MessageDlg('Файл уже существует. Перезаписать?', mtConfirmation, [mbYes, mbNo], 0) of
      mrNo: Exit;
    end;
  end;
 
  FHandle := FileCreate(Sd.FileName, fmCreate + fmShareDenyWrite);
  if FHandle = -1 then begin
    MessageDlg('Не удалось создать файл.', mtError, [mbOK], 0);
    Exit;
  end;
  Save(Memo1.Lines, FHandle);
  FileClose(FHandle);
end;
stdcall здесь не указывал, т. к. пример без DLL сделал. Да и в DLL можно без stdcall сделать - т. е. протокол pascal оставить. Потому что идёт обмен специфическими данными Delphi (TStrings) - такая DLL предназначена для использования в программах Delphi.
1
10.05.2011, 12:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2011, 12:00
Привет! Вот еще темы с ответами:

Массив: Получить массив B, присвоив его k-му элементу значение 0, если среди элементов k-го столбца матрицы нулей больше, чем единиц, иначе - 1 - Delphi
Здравствуйте! Помогите пожалуйста решить задачу. Задана матрица размером NxM. Получить массив B, присвоив его k-му элементу значение 0, ...

Что такое указатель и с чем его есть - C++
Я уже не знаю что делать, но в книжке очень непонятно написано про указатели. Не могли бы вы объяснить что такое указатели и зачем они. И...

DrawingVisual, что это такое и с чем его едят, или как перерисовать - C# WPF
Суть: есть Canvas (с координатами x) на котором рисуются DrawingVisual'ы, далее делается замена координат y = Ax + b, далее надо...

что такое Qt, и с чем его едят? - C++
Здравствуйте, я бы хотел узнать что такое Qt, и как на нем программировать, я слышал что это дополнение к С++, тогда вопросы: - что это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.