Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

прицепить Паскаль Dll к проекту Bcpp

270
22 октября 2005 года
Drew
265 / / 20.07.2000
имеется Паскаль DLL (прицеплена)

а в ней функции

PX_Initialize
Формат: function PX_Initialize(dwPort:Integer; fCallBack:TPXMessageProc):Integer; stdcall;
где
dwPort – номер последовательного порта, к которому подключен считыватель (1 – COM1, 2 – COM2, …, 255 – COM255);
fCallBack – функция обратного вызова, в которую будут передаваться события от считывателя.

Функция открывает COM-порт и инициализирует обработчик событий.

PX_Finalize
Формат: function PX_Finalize:Integer; stdcall;

Функция закрывает ранее открытый COM-порт.

Функция обратного вызова (ФОВ)
Тип: TPXMessageProc=procedure(dwMsg:LongWord; dwSite:LongWord; strKey:ShortString); stdcall;
где
dwMsg – код события;
dwSite – идентификатор считывателя (обычно равен 0x01);
strKey – строка, содержащая код карты, поднесенной к считывателю, либо номер сработавшего входа.

Как эту DLL прицепить к проекту BCPP через LoadLibrary?
9.6K
23 октября 2005 года
ruford
1 / / 20.12.2004
http://firststeps.ru/
Читаем там раздел про Билдер.
9.8K
23 октября 2005 года
bqserg
56 / / 27.09.2005
// Объявляем типы
typedef void _stdcall TPXMessageProc(unsigned dwMsg, unsigned dwSite, ShortString strKey);
typedef int _stdcall (*TPX_Initialize)(int dwPort, TPXMessageProc fCallBack);
typedef int _stdcall (*TPX_Finalize)();

// Объявляем переменные
TPX_Initialize PX_Initialize;
TPX_Finalize PX_Finalize;

// Твоя функция отклика
void _stdcall PXMessageProc(unsigned dwMsg, unsigned dwSite, ShortString strKey)
{
...
}

// Загрузка модуля и функций
void LoadPxdk;
{
HMODULE Hpxdk;

Hpxdk = LoadLibrary("pxdk.dll");
if (Hpxdk == 0)
return;

PX_Initialize = (TPX_Initialize)GetProcAddress(Hpxdk, "PX_Initialize");
PX_Finalize = (TPX_Finalize)GetProcAddress(Hpxdk, "PX_Finalize");
if (PX_Initialize == NULL)
return;
if (PX_Finalize == NULL)
return;
}

// И собственно их использование
PX_Initialize(2, PXMessageProc);
PX_Finalize();
270
23 октября 2005 года
Drew
265 / / 20.07.2000
E2034 Cannot convert 'void (__stdcall * (_closure )(unsigned int,unsigned int,ShortString))(unsigned int,unsigned int,ShortString)' to 'void (__stdcall *)(unsigned int,unsigned int,ShortString)'
E2342 Type mismatch in parameter 'fCallBack' (wanted 'void (__stdcall *)(unsigned int,unsigned int,ShortString)', got 'void')
E2277 Lvalue required

в объявление переменных добавил

TPXMessageProc PXMessageProc; (!!)

TPX_Initialize PX_Initialize;
TPX_Finalize PX_Finalize;

либо можно добавить целиком
void _stdcall PXMessageProc(unsigned dwMsg, unsigned dwSite, ShortString strKey);

тогда при выполнении операции

if(PX_Initialize(2,PXMessageProc)=0)
{
Application->MessageBox("Невозможно установить соединение с Proxymus\n\
Последовательый порт занят или не найден в системе",
"Ошибка", MB_ICONERROR);
}

не вылазит сообщение что незадекларирована переменная PXMessageProc
зато вылазит ошибка при компиляции, что сверху
270
23 октября 2005 года
Drew
265 / / 20.07.2000
Цитата:
Originally posted by ruford
http://firststeps.ru/
Читаем там раздел про Билдер.


это всё прочитано ДАВНО и сделано... и даже получены РЕАЛЬНЫЕ адреса функций, только при попытке использования функций сбоит программа и лезут идиотские ошибки про использование памяти.
так вот чтобы не просить помочь разобраться в МОЁМ коде, я прошу предложить СВОЙ вариант.

N.B. при подключении DLL которые делал САМ (на билдере) проблем нет

270
23 октября 2005 года
Drew
265 / / 20.07.2000
bqserg, Спасибо на добром слове!
Разобрался
Сам болван, недоглядел...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог