|
|
Регистрация | << Правила форума >> | 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
|
||||
|
||||
Цитата:
Цитата:
|
#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
|
||||
|
||||
Цитата:
|
#13
|
|||
|
|||
Цитата:
Потому что с ней завязано куча элементов который расположены на главной форме Combobox , label, и др.... Вообщем никак по другому. Nperemennoy() - должно быть объявлено как метод ... Другими словами моя злополучная библиотека отслеживает нажатия клавиш и в соответствии от этого меняются значения и свойства элементов расположенных на главной форме Цитата:
|
#14
|
||||
|
||||
Цитата:
Цитата:
|
#15
|
|||
|
|||
Этого я и боялся... а в обратном направлении тоесть из окна основной программы я могу передать значения каких-то переменных в dll ?
Я так и делаю (эти значения устанавливаются combobox расположенным на основной форме) далее запускается dll с ловушкой для отслеживается нажатия клавиатуры,при каждом нажатии клавиш dll записывает значение переменной присвоенной в основной форме(в combobox) в текстовый файл. Так вот когда я открываю текстовый файл а там одни нули.... хотя переменной я присваивал число 1 или любое другое |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|