Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Загрузка DLL в Delphi

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

MitriyGG1969

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имеется сторонняя DLL - MC8041P.DLL, описание и пример к ней на C++
Внутри имеется функция  
HANDLE    OpenCard_N(int no, void (WINAPI *isr)(void), int base_addr, int size, int irq);
isr - функция, которая в примере ни чего не делает
Как мен объявить и вызвать OpenCard_N в Delphi.

Всего записей: 3 | Зарегистр. 26-10-2012 | Отправлено: 23:28 26-10-2012
A_V

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как-то так примерно
 
type
 TIsrProc = procedure;
 
 function MyOpenCard(
   no: Integer; Isr: TIsrProc; base_addr: Integer; size: Integer; irq: Integer): THandle; stdcall; {или cdecl, как описана смотря, если как WINAPI это stdcall}
  external 'MC8041P.dll' name 'OpenCard_N';
 
вызов:
 
procedure p;
begin
 
end;
 
MyOpenCard(1,p,2,3,4);

Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 23:59 26-10-2012
MitriyGG1969

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ввожу примерно как то так
 
implementation
uses about, fWP, TRU;
{$R *.dfm}
type
  TIsr_sub=procedure ;
 
function OpenCardN(no: Integer; Isr: TIsr_Sub; base_addr: Integer; size: Integer; irq: Integer): THandle; stdcall;   external 'MC8041P.dll' name 'OpenCard_N';
 
procedure isr_sub;  stdcall;
var
a:integer;
begin
  a:=a+10;
end;
.......
  OpenCardN(0,@isr_Sub,0,0,0);
 
Без @ - компилятор ругается
В итоге получаю "Access violation at adress 000.. read of adress 000..
Что не так???

Всего записей: 3 | Зарегистр. 26-10-2012 | Отправлено: 11:58 27-10-2012
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MitriyGG1969
Наверное, правильно будет как-то так:

Код:
 
type  
   TIsr_sub=procedure; stdcall;
...
OpenCardN(0, isr_Sub, 0, 0, 0);
 


Всего записей: 767 | Зарегистр. 18-05-2009 | Отправлено: 14:01 27-10-2012 | Исправлено: Eternal_Shield, 14:02 27-10-2012
MitriyGG1969

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да без разницы -Access violation ивсе тут

Всего записей: 3 | Зарегистр. 26-10-2012 | Отправлено: 15:03 27-10-2012
A_V

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MitriyGG1969
@ - тут не нужен, компилятор не должен ругаться, т.к процедура должна быть глобальной а не локальной

Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 15:25 27-10-2012
YuriyRR



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
@ - тут не нужен, компилятор не должен ругаться, т.к процедура должна быть глобальной а не локальной

Это про что сейчас тут?

Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 03:16 28-10-2012
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MitriyGG1969
Что дали, то и преобразовали, и всё сделано верно. Другое дело, что параметр base_addr в вызове не должен быть равен нулю. Нет? Укажите уже этот базовый адрес ($400000?!) ... а вообще RTFM к этой DLLке.

Всего записей: 767 | Зарегистр. 18-05-2009 | Отправлено: 16:06 28-10-2012
A_V

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuriyRR

Цитата:
Это про что сейчас тут?

про это

Цитата:
 
OpenCardN(0,@isr_Sub,0,0,0);  
 Без @ - компилятор ругается  
 

Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 18:42 28-10-2012
Dmitry

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MitriyGG1969
 
Про то что isr имеет соглашение о вызовах winapi (т.е. stdcall в delphi) сказали, а вот про то что OpenCard_N судя по всему cdecl никто не сказал.

Всего записей: 81 | Зарегистр. 24-09-2003 | Отправлено: 00:13 06-09-2013
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Ввожу примерно как то так
 
  OpenCardN(0,@isr_Sub,0,0,0);

нулевое прерывание -- это охренеть...

Всего записей: 24114 | Зарегистр. 06-12-2002 | Отправлено: 00:23 06-09-2013
A_V

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dmitry

Цитата:
а вот про то что OpenCard_N судя по всему cdecl никто не сказал

сказали, в первом же ответе )
а stdcall коллбеку можно не писать, если он параметры не принимает
зы:я понимаю, что нужны посты для дельфевой копилки, но откапывать темы годовой давности все-таки перебор )

Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 12:05 06-09-2013 | Исправлено: A_V, 12:07 06-09-2013
Dmitry

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A_V

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

Ну во-первых никто не отписался что проблема решена.
А во-вторых вы уже достали своей копилкой. Я на дельфе не программлю (уже) и копилкой не интересуюсь. В каждом втором посте в "Прикладном программировании" меряются пиписьками по поводу копилки.

Всего записей: 81 | Зарегистр. 24-09-2003 | Отправлено: 12:22 06-09-2013
A_V

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dmitry
>Ну во-первых никто не отписался что проблема решена
конечно, ТС  целый год терпеливо ждал твоего появления! сейчас несомненно отпишется.
меряться ничем не собирался, не ради постов, так тем более забавно )

Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 16:33 06-09-2013 | Исправлено: A_V, 16:45 06-09-2013
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Загрузка DLL в Delphi


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru