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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2012, 10:33   #1
xvs
 
Регистрация: 24.01.2012
Сообщений: 5
По умолчанию вызов функции из dll в потоке

Добрый день!

Полистав форум, к сожалению, так и не нашел ответа на свой вопрос.
Есть некая функция, экспортируемая из dll (длл не моя, исходников нет, есть только текстовый файл с описанием функций). Подскажите пожалуйста, как правильно организовать ее вызов из потока.

Заранее благодарен за помощь.
xvs вне форума Ответить с цитированием
Старый 29.03.2012, 11:03   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вызов функции в потоке или не в потоке ничем не отличается.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.03.2012, 11:22   #3
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Динамически грузи ДЛЛ и используй её как обычно. В чем именно проблема то?
FaTaL вне форума Ответить с цитированием
Старый 29.03.2012, 12:33   #4
xvs
 
Регистрация: 24.01.2012
Сообщений: 5
По умолчанию

Приведу выдержки из кода:

Описание функциии и динамический вызов библиотеки
Цитата:
type
TReadSInt = function (adr,adr_type:DWORD;command:PChar;v ar value:Integer;index:Integer): Integer; stdcall;
...

var
ReadSInt: TReadSInt;
hndDLLHandle: Thandle;
...

procedure TForm1.FormShow(Sender: TObject);
begin
try
hndDLLHandle := loadLibrary('owen_io.dll');
if hndDLLHandle <> 0 then
begin
@ReadSInt := getProcAddress ( hndDLLHandle, 'ReadSInt' );
end
else
showMessage ( 'DLL not found...' );
finally
end;
end;
Далее по клику на кнопку создается поток, в котором зацикливается вызов функции с определенными параметрами:
Цитата:
procedure TThreadIO.Execute;
begin
while True do
readsint(16,0,'r.Cn',mask,-1);
end;
Вообщем, в таком виде не работает...
xvs вне форума Ответить с цитированием
Старый 29.03.2012, 12:52   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...конечно я дико извиняюсь, но:
Цитата:
Код:
procedure TForm1.FormShow(Sender: TObject);
 begin
 try
 hndDLLHandle := loadLibrary('owen_io.dll');
 if hndDLLHandle <> 0 then
 begin
 @ReadSInt := getProcAddress ( hndDLLHandle, 'ReadSInt' );
 end
 else
 showMessage ( 'DLL not found...' );
 finally
 end;
 end;
кто будет читать доки на использование OWEN-вской библиотеки, а? Где импорт и вызов функций открытия порта, настройки порта, выбора интерфейса, закрытия порта (для корректности), SetApiMode ? Где это все? Вы читаете из порта, не открыв и не настроив его?

p.s.: на официальном форуме техподдержки OWEN данный вопрос обсасывался раз -надцать.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 29.03.2012, 12:59   #6
xvs
 
Регистрация: 24.01.2012
Сообщений: 5
По умолчанию

Цитата:
...конечно я дико извиняюсь, но:
Я конечно, тоже дико извиняюсь, но все эти вызовы и настройки порта, о которых вы мне напомнили, я разумеется выполнил после загрузки библиотеки, но умолчал, чтобы не отвлекать пользователей от сути вопроса...

...
Смысл в том, что функция отрабатывает, если, например, ее засунуть под кнопку, но не хочет работать в потоке...

Последний раз редактировалось xvs; 29.03.2012 в 13:02. Причина: дополнение к сказанному
xvs вне форума Ответить с цитированием
Старый 29.03.2012, 13:04   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...еще раз дико извиняюсь, но о чем еще вы умолчали? Полный код в тему, диагностировать по фото не обучены.

Как пример:
Цитата:
и настройки порта
в 8-ми или 11 битном режиме?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 29.03.2012, 13:16   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Смысл в том, что функция отрабатывает, если, например, ее засунуть под кнопку, но не хочет работать в потоке...
задержки добавьте в потоке ...и как проверили, что сам поток запущен?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 29.03.2012 в 13:19.
raxp вне форума Ответить с цитированием
Старый 29.03.2012, 13:54   #9
xvs
 
Регистрация: 24.01.2012
Сообщений: 5
По умолчанию

Всем спасибо. Заработала шарманка... Может быть не совсем корректное решение, но работает. Решилось через добавление SelectPort(com_x) в Execute потока до выхода в цикл. Задержки в потоке оказались не нужны.
xvs вне форума Ответить с цитированием
Старый 29.03.2012, 13:56   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
через добавление SelectPort(com_x)
а ведь написали, что усе настроено и все в ажуре . В следующий раз полный код и без телепатов.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов функции из DLL Vegas C# (си шарп) 2 19.12.2011 00:57
Вызов функции из DLL(C#) ZverSS88 Помощь студентам 0 25.11.2010 11:27
Вызов произвольной функции из DLL Роман Радер Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 31 05.03.2010 22:35
Повторный вызов функции из dll Smertnik Общие вопросы C/C++ 5 15.05.2009 22:18
Вызов функции из dll-ки VVVadim Общие вопросы Delphi 2 28.04.2009 10:37