|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Не все функции работают в DLL
Доброго времени суток! Я новичек в использовании библиотек dll . Вот суть проблемы:
Есть основная программа main.dpr в ней объявлена процедура Код:
procedure keyctrl(); begin writedata; // обявлено в другом модуле mod.pas writeln(ft,' x='+inttostr(x)+' writedata'); // end; есть библиотека libr.dll в ней создана ловушка для перехвата сообщений с клавиатуры, в определенный момент с библиотеки вызывается процедура keyctrl(); так вот почему то в этой вызванной процедуре выполняются все действия кроме writedata; // обявлено в другом модуле mod.pas Во время выполнения программы никаких ошибок не возникает ... просто проходит мимо этого действия и все... |
#2
|
||||
|
||||
Цитата:
Ты на 100% уверен, что вызываешь writedata именно из модуля mod.pas, а не из какого-то другого? |
#3
|
|||
|
|||
нет, прошу прощения называется он tmod.pas и процедура writedata успешно вызывается из любого места программы кроме библиотеки
|
#4
|
||||
|
||||
Цитата:
|
#5
|
|||
|
|||
какой-то полтергейст, вчера никак не хотело работать, сегодня после десятка манипуляций, открытий сохранений перезагрузок, функция 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; |
#6
|
|||
|
|||
Тут сказывается мое плохое понимание для работы с классами
Код:
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
|
||||
|
||||
Цитата:
Цитата:
|