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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.12.2009, 22:17
userlife userlife вне форума
Прохожий
 
Регистрация: 17.12.2009
Сообщения: 10
Репутация: 10
Вопрос Крутой девайс

Здравствуйте всем.
Случилось у меня,что приобрел я однажды некий крутой девайс АЦП-ЦАП.Теперь не могу к нему программно доступиться,хотя документация есть.Проблемма в том,что примеры даны на языке С,в котором я ... ну ничего не...
Здесь я подаю материалы,как они поданы в примере документации.Может кто-нить поможет мне перевести эти команды в делфовский вид и запустить таки этот мудреный девайс?
В исходнике прилагается некая DLL библиотека IsaBox.dll

-------------------------------------------------------------
Пример сборки шины и доступа к портам

В данном примере подключим устройство на COM2.
Скорость обмена по COM-порту 115200 кбит/с, адрес контроллера 0x05.

Код:
#define COM2  1
#define LOCAL_PORT  5100
void main(void)
{
unsigned long ComInterface, ComController;
unsigned short PortValue;

// 1. Очистка реестров интерфейсов и контроллеров
ibcClearControllerList();// это функции библиотеки IsaBox.dll
ibcClearInterfaceList();

// 2. Регистрация интерфейса
ComInterface = ibcOpenInterface(COM2, 115200, NULL);// это функции библиотеки IsaBox.dll

// 3. Регистрация контроллеров
ComController = ibcOpenController(ComInterface,0x05,0x300,0x309);
// 0x300,0x309 - адреса портов ввода-вывода сего девайса

  }
------------------------------------------------------------------
Вот что попробовал сделать я.Ввиду моего малого опыта программирования,я решил библиотеку IsaBox.dll подключить статически.
------------------------------------------------------------------
Код:
...
var OpenInterf:cardinal;

implementation

{$R *.dfm}
{N+,E+} // так содрал с руководства Фараонова

Procedure ibcClearControllerList; Far; External 'Isabox.dll';
Procedure ibcClearInterfaceList;  Far; External 'Isabox.dll';

Function ibcOpenInterface(Com:byte;baud:longint;p:pointer):cardinal; Far; External 'Isabox.dll';
Function ibcOpenController(handle:longint;adr:longint;adr0:longint;adr1:longint):cardinal; Far; External 'Isabox.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
 ibcClearControllerList();
 ibcClearInterfaceList();
 OpenInterf:=ibcOpenInterface(COM2,115200,nil);// на этом загвоздка.Выдает error

end;

lmikle: пользуем теги!!!

Вот и все.При пошаговой отладке две первые команды проходят,а третья выдает ошибку.В чем дело не знаю.Может я типы неправильно назвал или записал не так?
Может кто из опытных ребят поможет привести модуль в рабочий вид?
Заранее всем спасибо.

userlife
Ответить с цитированием
  #2  
Старый 17.12.2009, 22:33
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,105
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Не факт, что ты правильно импортировал функции библиотеки. Для первых функций, кторые без параметров, модель вызова не важна. А вот для третьей - очень даже важна. Попробуй пометить импортируемые функции как stdcall;
2. Не уверен, что типы параметров у тебя указаны правильно. Надо смотреть точное поисание заголовка фуниций в документации и уже тогда выбирать типы соотв. параметров. Например, там, где указано unsigned short лучше использовать WORD;

По имени библиотеки можно найьт описание функций.
Например:
Код:
unsigned long ibcOpenInterface(unsigned char ComPort, 
                               unsigned long Baudrate, 
                               HANDLE OpenPortHandle); 

я бы оттранслировал бы так:

Код:
function ibcOpenInterface(ComPort : Byte; Baudrate : DWORD; OpenPortHandle : THandle) : DWORD; stdcall; external 'IsaBox.dll';
Ответить с цитированием
  #3  
Старый 18.12.2009, 15:53
userlife userlife вне форума
Прохожий
 
Регистрация: 17.12.2009
Сообщения: 10
Репутация: 10
Вопрос Что-то оживилось

Спасибо,товарищ Модератор.
Сделал так как Вы рекомендовал и отладчик плеваться эррорами перестал.Пришлось методом программного втыка добавить выключение-включение девайса (о чем в руководстве почему-то не сказано),потом он перестал виснуть на запросах портов.Пишет ли он в них что-то (например управляющие слова) пока неизвестно,но вычитать оттуда моей
программой еще ничего не удалось.Не читаются пока порты.Сидел полдня,тыкал-тыкал,типы данных менял и увы - ничего.

Кстати,за подобный вопрос в Королевстве Делфи на меня надулись и посмотрели очень злобно.Я наверное задаю дурные вопросы? Не проффесионал ведь.Хобби только.А вам спасибо за человечность.Все ж когда-то были начинающими.Не так ли?
Ответить с цитированием
  #4  
Старый 18.12.2009, 16:13
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,105
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, вообще, на будущее запомни, что сишные библиотеки обчно надо импортировать, указывая соглашение о передачи параметров именно как stdcall. А нет ли для этой штуки COM-интерфейса. С ним бы было тебе гораздо проще, т.к. импорт производится автоматически, да и работать чуть удобнее, хотя, в общем, работает и чуть медленнее.
Ответить с цитированием
  #5  
Старый 18.12.2009, 17:05
userlife userlife вне форума
Прохожий
 
Регистрация: 17.12.2009
Сообщения: 10
Репутация: 10
Вопрос Чудо-девайс

Вся эта штуковина в черном длинном корпусе разработана под шину ISA.
Но поскольку у меня ноутбук и ничего в него уже не сунешь,ребята в этом самом ящике сделали прототип этой самой шины и подцепили его к USB.Так что прежде всего я установил USB драйвер,потом зарегистрировал в Виндовсе IsaBox.dll.
В устройствах после инсталляции появляется новый COM порт,который можно выбрать из свободных с номерами от COM1 аж по COM16.
Далее там прилагается готовая программа IsaBox Administrator.Так через нее этот девайс виден и даже работает,но для моих целей требуется собственное программирование.То,что есть в прилагаемой документации,пока реализовать не удалось.Сейчас снова буду рыться в науке.Поробую заводить в порты и выводить из них вручную этим самим Администратором.
Результаты сообщу как только что-нибудь получится.
Ответить с цитированием
  #6  
Старый 18.12.2009, 17:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,105
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

COM, который я имел в виду - это Component Object Model, а не COM-порт
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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