Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2008, 06:57   #1
Иллидан
Форумчанин
 
Регистрация: 16.01.2008
Сообщений: 288
По умолчанию Передача строки-как параметра-переменной

Проблема с передачей строки. То есть получается так:
type
smas= array [1..50] of string;
var
s:smas;

procedure nik(var s1:smas);
var
F1:textFile;
i:integer;
begin
AssignFile(f1,'1.dat');
i:=0;

repeat
inc(i);
readln(f1,s1[i]);
until eof(f1)=true;


end;


begin

nil(s);

//выдает ошибку или работает неправильно,
//видимо потому, что s не были приcвоены начальные значения
// в основной программе?
end.

Последний раз редактировалось Иллидан; 01.10.2008 в 08:13.
Иллидан вне форума Ответить с цитированием
Старый 01.10.2008, 07:23   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

repeat
inc(i);
readln(f1,s1[i]);
until eof(f1)=true;
puporev вне форума Ответить с цитированием
Старый 01.10.2008, 08:16   #3
Иллидан
Форумчанин
 
Регистрация: 16.01.2008
Сообщений: 288
По умолчанию

Цитата:
readln(f1,s1[i]);
Извиняюсь,опечатался, я без Дельфи набирал. Исправил выше. Как раз этот код у меня работает не верно.
Иллидан вне форума Ответить с цитированием
Старый 01.10.2008, 08:34   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Код:
type
smas= array [1..50] of string;
var
s:smas;
f1:textfile;
i,j:integer;
procedure nik(var s1:smas;var i:integer);//выдает размерность массива
begin
AssignFile(f1,'1.dat');
Reset(f1); //читать файл
i:=0;
repeat
inc(i);
readln(f1,s1[i]);
until eof(f1)=true;
close(f1);//закрыть файл
end;

begin
nik(s,i);
for j:=1 to i do//вывести результат на экран
writeln(s[j]);
readln
end.
puporev вне форума Ответить с цитированием
Старый 02.10.2008, 06:44   #5
Иллидан
Форумчанин
 
Регистрация: 16.01.2008
Сообщений: 288
По умолчанию

Ваш код правильно работает, если описывать процедуру в основной программе. Если же вызывать процедуру из dll то, почему-то, работает не верно.
Иллидан вне форума Ответить с цитированием
Старый 02.10.2008, 07:40   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Код или работает или не работает. А уж как Вы написали dll и как вызываете, это уже совсем другой вопрос. У некоторых и Windows неправильно работает.
puporev вне форума Ответить с цитированием
Старый 02.10.2008, 07:48   #7
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Возможно ошибка связана с использованием String в DLL. Нужно либо использовать PChar либо прописать в разделе uses модуля DPR модуль ShareMem и вроде как в главном модуле библиотеки тоже.
Код:
program MyProgram;

uses
  ShareMem,
  ...
и вроде как
Код:
library MyLibrary;

uses
  ShareMem,
  ...
Sibedir вне форума Ответить с цитированием
Старый 02.10.2008, 11:11   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
nil(s);
а почему NIL ???!!!
может NIK(s) ??

___________________________________ __________
добавлено
Цитата:
Ваш код правильно работает, если описывать процедуру в основной программе. Если же вызывать процедуру из dll то, почему-то, работает не верно.
извините, не дочитал... похоже, моё замечание Вам ни к чему... ;-( а это была просто описка...

Последний раз редактировалось Serge_Bliznykov; 02.10.2008 в 11:15. Причина: добавлено...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.10.2008, 11:44   #9
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

А может заюзать TStringList или TStrings?
пыщь
JTG вне форума Ответить с цитированием
Старый 03.10.2008, 09:57   #10
Иллидан
Форумчанин
 
Регистрация: 16.01.2008
Сообщений: 288
По умолчанию

Цитата:
Возможно ошибка связана с использованием String в DLL. Нужно либо использовать PChar либо прописать в разделе uses модуля DPR модуль ShareMem и вроде как в главном модуле библиотеки тоже.

Код:

program MyProgram;

uses
ShareMem,
...

и вроде как

Код:

library MyLibrary;

uses
ShareMem,
...
Да, теперь все правильно грузится. Но, при выходе из программы в любом случае возникает ошибка ( и предложение отправить ее в гости к Биллу) , независимо от того загружал я подпрограмму из Длл или нет. Вообще, возникает ошибка в любом случае в конце программы, если я просто подключаю ShareMem. Может надо как-то память освободить или что-то подобное?

Последний раз редактировалось Иллидан; 03.10.2008 в 11:39.
Иллидан вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача компонента как параметра в функцию hayhay Microsoft Office Excel 1 11.03.2008 15:53
Передача параметра в поток joker Win Api 10 22.12.2007 12:53
Извлечь число из строки и присвоить его переменной. Adamant Общие вопросы C/C++ 3 12.11.2007 07:24
Передача параметра компаненту на другой форме. Kukkk Компоненты Delphi 1 28.09.2007 00:31