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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2013, 15:28   #1
Lucky beggar
Пользователь
 
Регистрация: 23.05.2012
Сообщений: 34
По умолчанию DLL фалйы в Delphi

Добрый день(вечер, утро). Уже который день не могу сделать DLL файл в Delphi, а точнее, в DLL файле написана процедура "выдергивания" орпеделенного текста

Содержимое DLL файла:
Код:
procedure format (s:widestring); stdcall;export;
var    beg,en:integer;
begin
  beg:=pos('<div class="medium">',s);
  en:=pos('<div class="space">',s);
  delete(s,1,beg);
  delete(s,en,length(s));
end;
exports format;
begin
end.
Основная программа:
Код:
var
  Form1: TForm1;
  f:text;
implementation
{$R *.dfm}
procedure format(s:widestring);stdcall;
  external 'Project2.dll'
procedure TForm1.Image2Click(Sender: TObject);
var s:string;
begin
assignfile(f,'D:\M.D\My documents\гороскоп\horo.txt');
rewrite(f);
s:= IdHTTP1.Get('http://astroscope.ru/horoskop/ejednevniy_goroskop/aries.html');
writeln(f,s);
format(widestring(s));
closefile(f);
end;
Процедура в DLL файле не рабоает. В чем моя ошибка? и можете объяснить, как как программа и DLL файл передают друг другу параметры(в данном случае переменную s)?
Lucky beggar вне форума Ответить с цитированием
Старый 15.05.2013, 15:36   #2
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Цитата:
Процедура в DLL файле не рабоает
по чем это видно?
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 15.05.2013, 15:41   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,528
По умолчанию

эта процедура не будет работать так как ожидалось и без DLL.
читать про ТИПЫ(виды) передачи параметров. (можно поиском по сайту) но лучше в УЧЕБНИКЕ по Pascal|Delphi.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 15.05.2013, 15:54   #4
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

У тебя procedure format (s:widestring); stdcall;export; ПРОЦЕДУРА!
Что ты от неё хочешь? Она же ничего не возвращает в отличии от функции.
Тебе нужно писать функцию, которая будет тебе возвращать твой обрезанный текст.

Последний раз редактировалось FaTaL; 15.05.2013 в 15:56.
FaTaL вне форума Ответить с цитированием
Старый 15.05.2013, 17:04   #5
Dik0n
 
Регистрация: 26.11.2012
Сообщений: 6
По умолчанию

передавай так:
Код:
procedure format (var s:widestring); stdcall;export;
Dik0n вне форума Ответить с цитированием
Старый 15.05.2013, 19:16   #6
Lucky beggar
Пользователь
 
Регистрация: 23.05.2012
Сообщений: 34
По умолчанию

Цитата:
по чем это видно?
Исходный код страницы содержит примерно 1500 символов, после выполнения программы ни один символ не был удален.


Цитата:
передавай так:
Код:

procedure format (var s:widestring); stdcall;export;
При добавлении слова var программа перестает работать и открывает CPU окно.

Цитата:
эта процедура не будет работать так как ожидалось и без DLL.
читать про ТИПЫ(виды) передачи параметров
Если Вы имели ввиду передачи данных в виде ссылок (создание ссылки внутри DLL), то я пробовал, но программа выдавала ошибку

Цитата:
У тебя procedure format (s:widestring); stdcall;export; ПРОЦЕДУРА!
Что ты от неё хочешь? Она же ничего не возвращает в отличии от функции.
Тебе нужно писать функцию, которая будет тебе возвращать твой обрезанный текст.
Сейчас попбробуем написать...
Lucky beggar вне форума Ответить с цитированием
Старый 15.05.2013, 19:42   #7
Lucky beggar
Пользователь
 
Регистрация: 23.05.2012
Сообщений: 34
По умолчанию

Попробовал использовать функцию. Выдает ошибку "invalid pointer operation".
Вот код DLL файла:
Код:
function format (s:widestring):string; stdcall;
var    beg,en:integer;
begin
  beg:=pos('<div class="medium">',s);
  en:=pos('<div class="space">',s);
  delete(s,1,beg);
  delete(s,en,length(s));
  format:=s;
end;
exports format;
begin
end.
Код процедуры:
Код:
function format(s:widestring):string;stdcall;
  external 'Project2.dll'


procedure TForm1.Image2Click(Sender: TObject);
var s:string;
begin
assignfile(f,'D:\M.D\My documents\гороскоп\horo.txt');
rewrite(f);
s:= IdHTTP1.Get('http://astroscope.ru/horoskop/ejednevniy_goroskop/aries.html');
writeln(f,s);
format(widestring(s));
closefile(f);
end;
Lucky beggar вне форума Ответить с цитированием
Старый 15.05.2013, 19:50   #8
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Ну и по самому коду.
Код:
en:=pos('<div class="space">',s);
delete(s,1,beg);
Строчки надо местами поменять, иначе позиция en будет смещена.
Если есть желание, то можно простым copy обойтись без удаления.
Ну а если теги не нужны, то к позиции надо прибавить 19 (кол-во лишних символов в тегах)
eoln вне форума Ответить с цитированием
Старый 15.05.2013, 19:55   #9
Lucky beggar
Пользователь
 
Регистрация: 23.05.2012
Сообщений: 34
По умолчанию

Цитата:
Ну и по самому коду.
Код:

en:=pos('<div class="space">',s);
delete(s,1,beg);

Строчки надо местами поменять, иначе позиция en будет смещена.
Ух ты. Не заметил даже. Спасибо

Цитата:
Ну а если теги не нужны, то к позиции надо прибавить 19 (кол-во лишних символов в тегах)
Учту.

Последний раз редактировалось Lucky beggar; 15.05.2013 в 20:01.
Lucky beggar вне форума Ответить с цитированием
Старый 15.05.2013, 20:17   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

возвращайте тоже widestring.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в libcef.dll только с Delphi 7, в Delphi XE3 - нет noname_06 Общие вопросы Delphi 6 08.05.2013 06:49
C# & DLL: как указать, что загружать DLL нужно из ЗАДАННОЙ папки "D:\My\Path\a.dll" ? AntyDES C# (си шарп) 11 10.10.2012 20:00
DLL в Delphi _-Re@l-_ Общие вопросы Delphi 1 27.08.2010 19:56
Delphi dll tanek Помощь студентам 6 14.03.2010 15:38
Создать DLL на C# и вызвать её в Delphi (Delphi) RIO Общие вопросы Delphi 2 25.03.2008 15:33