Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.10.2012, 16:06
helgboy helgboy вне форума
Прохожий
 
Регистрация: 30.10.2012
Сообщения: 33
Репутация: 10
Вопрос Не все функции работают в DLL

Доброго времени суток! Я новичек в использовании библиотек dll . Вот суть проблемы:
Есть основная программа main.dpr в ней объявлена процедура

Код:
procedure keyctrl();
begin
writedata;   // обявлено в другом модуле  mod.pas 
writeln(ft,' x='+inttostr(x)+' writedata'); // 
end;

есть библиотека
libr.dll в ней создана ловушка для перехвата сообщений с клавиатуры, в определенный момент с библиотеки вызывается процедура keyctrl();
так вот почему то в этой вызванной процедуре выполняются все действия кроме writedata; // обявлено в другом модуле mod.pas

Во время выполнения программы никаких ошибок не возникает ... просто проходит мимо этого действия и все...
Ответить с цитированием
  #2  
Старый 31.10.2012, 03:56
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от helgboy
так вот почему то в этой вызванной процедуре выполняются все действия кроме writedata; // обявлено в другом модуле mod.pas
А вот меня интересует как Delphi у тебя смог скомпилировать модуль с таким именем? У меня наотрез отказывается так как mod это зарезервированное слово.
Ты на 100% уверен, что вызываешь writedata именно из модуля mod.pas, а не из какого-то другого?
Ответить с цитированием
  #3  
Старый 31.10.2012, 10:17
helgboy helgboy вне форума
Прохожий
 
Регистрация: 30.10.2012
Сообщения: 33
Репутация: 10
По умолчанию

нет, прошу прощения называется он tmod.pas и процедура writedata успешно вызывается из любого места программы кроме библиотеки
Ответить с цитированием
  #4  
Старый 31.10.2012, 10:25
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от helgboy
нет, прошу прощения называется он tmod.pas и процедура writedata успешно вызывается из любого места программы кроме библиотеки
Т.е. в процедуре keyctrl вызывается writeln, но не вызывается writedata? Не верю.
Ответить с цитированием
  #5  
Старый 31.10.2012, 12:27
helgboy helgboy вне форума
Прохожий
 
Регистрация: 30.10.2012
Сообщения: 33
Репутация: 10
По умолчанию

какой-то полтергейст, вчера никак не хотело работать, сегодня после десятка манипуляций, открытий сохранений перезагрузок, функция writedata стала выполнятся, правда с кое-каками мат. ошибками. И вот попутная проблема.
Чтоб все было совсем хорошо надо объявить процедуру не после var а в type и дальше в программе описать ее так:
Код:
procedure Tmain.keyctrl();
begin
writedata;   // обявлено в другом модуле  mod.pas
writeln(ft,' x='+inttostr(x)); //
Nperemennoy();// Необходим вызов этой функции... как сделать правильно?
end;

procedure Tmain.Nperemennoy();
begin
...
end;


Так вот теперь уже проблема вызвать keyctrl() из библиотеки пишет что не может найти такую процедуру, а
если обьявляю так:
Код:
procedure keyctrl();
begin
writedata;   // обявлено в другом модуле  mod.pas
writeln(ft,' x='+inttostr(x)); //
Nperemennoy();// Необходим вызов этой функции... как сделать правильно?
end;
то процедура вызывается из библиотеки но тогда не вызвается Nperemennoy(); Как сделать чтоб все вызывалось?
Ответить с цитированием
  #6  
Старый 31.10.2012, 12:49
helgboy helgboy вне форума
Прохожий
 
Регистрация: 30.10.2012
Сообщения: 33
Репутация: 10
По умолчанию

Тут сказывается мое плохое понимание для работы с классами
Код:
type
  Tmain = class(TForm)
procedure keyctrl();
procedure Nperemennoy();
end;

var
....
implementation

begin
procedure Tmain.keyctrl();
begin
writedata;   // обявлено в другом модуле  mod.pas
writeln(ft,' x='+inttostr(x)); //
Nperemennoy();// Необходим вызов этой функции... как сделать правильно?
end;
 
procedure Tmain.Nperemennoy();
begin
...
end;
.....
end.

Вот нужно переделать походу чтоб функция keyctrl не присваивалась к классу главной формы и тем не менее могла сама вызывать Nperemennoy();
а также без проблем вызываться из библиотеки.
Ответить с цитированием
  #7  
Старый 31.10.2012, 12:49
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от helgboy
Так вот теперь уже проблема вызвать keyctrl() из библиотеки пишет что не может найти такую процедуру,
Ну компилятор врать не будет. Возможно ты пытаешься вызвать метод как процедуру?
Цитата:
Сообщение от helgboy
а
если обьявляю так:
Код:
procedure keyctrl();
begin
writedata;   // обявлено в другом модуле  mod.pas
writeln(ft,' x='+inttostr(x)); //
Nperemennoy();// Необходим вызов этой функции... как сделать правильно?
end;
то процедура вызывается из библиотеки но тогда не вызвается Nperemennoy(); Как сделать чтоб все вызывалось?
А каким образом ты определяешь, что Nperemennoy не вызывается? Поставь внутри процедуры Nperemennoy в самом начале MessageBeep(0); (только модуль Windows подключи) - слышно звук при вызове процедуры keyctrl?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:13.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter