![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброго времени суток! Я новичек в использовании библиотек 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
|
||||
|
||||
|
Цитата:
Цитата:
|
|
#8
|
||||
|
||||
|
Цитата:
|
|
#9
|
|||
|
|||
|
Цитата:
Nperemennoy(); и выдает ошибку [Error] main.pas(165): Undeclared identifier: 'Nperemennoy' |
|
#10
|
||||
|
||||
|
Цитата:
|
|
#11
|
|||
|
|||
|
Цитата:
Ну хорошо как же мне вызвать метод из обычной процедуры???? если сделать так: Код:
procedure keyctrl(); begin writedata; // обявлено в другом модуле mod.pas writeln(ft,' x='+inttostr(x)); // Tmain.Nperemennoy();// Необходим вызов этой функции... как сделать правильно? end; то ругается так: [Error] main.pas(166): This form of method call only allowed for class methods |
|
#12
|
||||
|
||||
|
Цитата:
Если тебе нужно вызывать метод из класса (а не из объекта как обычно), то такой метод тебе нужно объявить как классовый. Только вот зачем ты оформил Nperemennoy как метод класса Tmain, а не как обычную процедуру? |
|
#13
|
|||
|
|||
|
Цитата:
Потому что с ней завязано куча элементов который расположены на главной форме Combobox , label, и др.... Вообщем никак по другому. Nperemennoy() - должно быть объявлено как метод ... Другими словами моя злополучная библиотека отслеживает нажатия клавиш и в соответствии от этого меняются значения и свойства элементов расположенных на главной форме Цитата:
|
|
#14
|
||||
|
||||
|
Цитата:
Цитата:
|
|
#15
|
|||
|
|||
|
Этого я и боялся... а в обратном направлении тоесть из окна основной программы я могу передать значения каких-то переменных в dll ?
Я так и делаю (эти значения устанавливаются combobox расположенным на основной форме) далее запускается dll с ловушкой для отслеживается нажатия клавиатуры,при каждом нажатии клавиш dll записывает значение переменной присвоенной в основной форме(в combobox) в текстовый файл. Так вот когда я открываю текстовый файл а там одни нули.... хотя переменной я присваивал число 1 или любое другое |
![]() |
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|