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

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

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2013, 17:29   #1
Son
Пользователь
 
Аватар для Son
 
Регистрация: 24.11.2008
Сообщений: 76
По умолчанию Вызов в Lazarus функции из dll на C.

Здравствуйте. Пытаюсь вызвать из dll функцию (Чтение по протоколу Modbus). Описание функции такое:
Код:
DWORD // MBX_SUCCESS if successful, else error code
WINAPI
MbxWriteMpCmdWait(
IN HANDLE hDevice, // Device driver handle from MbxOpen()
IN MBXPATHID PathID, // DM/PM path ID from MbxOpenMp()
IN USHORT Routing[ ], // Ptr to array of 5 (16-bit) routing codes
IN DWORD dwRoutingSize, // Routing array size in bytes
IN PMBXPKT pCmdPkt, // Ptr to command packet
IN DWORD dwCmdPktSize, // Command packet size in bytes
OUT PMBXPKT pReplyPkt, // Ptr to reply packet
IN OUT PDWORD pdwReplyPktSize, // Ptr to reply packet size in bytes
IN DWORD dwTimeout // Time-out in milliseconds
);
На Lazarus пишу так:
Код:
  function MbxWriteMpCmdWait(hDevice : HANDLE;
                             PathID : TMBXPATHID;
                             Routing : WORD;
                             dwRoutingSize : DWORD;
                             pCmdPkt : TMBXPKT;
                             dwCmdPktSize : DWORD;
                             var pReplyPkt : TMBXPKT;
                             var pdwReplyPktSize : DWORD;
                             dwTimeOut : DWORD): DWORD; stdcall;external 'mbxapi.dll' name 'MbxWriteMpCmdWait';   
...
{вызов:}
  ResultErr:=MbxWriteMpCmdWait(
                               DeviceHandle,
                               PathID,
                               Routing[0],
                               10,
                               MbPkt,
                               5,
                               MbPkt,
                               dwReplyPktSize,
                               5000);
При компиляции идет ошибка. Вопрос: правильно ли я портирую функцию или что напута с указателями?
Лучше сдохнуть, чем жить с иглой в яйце (Кащей Бессмертный)
Son вне форума Ответить с цитированием
Старый 26.08.2013, 18:37   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
При компиляции идет ошибка
Ох... Еще один телепат... Прям шоу экстрасенсов.
Ладно Достаю свой телепатор, начинаю телепать:
Код:
MbxWriteMpCmdWait(
 hDevice:HANDLE , // Device driver handle from MbxOpen()
 PathID:MBXPATHID, // DM/PM path ID from MbxOpenMp()
 Routing:Pointer, // Ptr to array of 5 (16-bit) routing codes
 dwRoutingSize:Cardinal, // Routing array size in bytes
 pCmdPkt:PMBXPKT, // Ptr to command packet
 dwCmdPktSize:Cardinal, // Command packet size in bytes
 pReplyPkt:PMBXPKT, // Ptr to reply packet
 var pdwReplyPktSize:Cardinal, // Ptr to reply packet size in bytes
 dwTimeout:Cardinal // Time-out in milliseconds
):Cardinal;
Это учитывая что ни текста ошибки ни указанных тут типов я не знаю.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.08.2013, 08:49   #3
Son
Пользователь
 
Аватар для Son
 
Регистрация: 24.11.2008
Сообщений: 76
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это учитывая что ни текста ошибки ни указанных тут типов я не знаю.
К сожалению текста ошибки Lazarus толком ничего не дает.
"Проект mbxread вызвал класс исключения 'External:SIGSEGV'/. По адресу
2A032A8"
А с дисассемблером я ноль (((
Лучше сдохнуть, чем жить с иглой в яйце (Кащей Бессмертный)
Son вне форума Ответить с цитированием
Старый 27.08.2013, 10:13   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...приложите MBX SDK, почитаем.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 27.08.2013, 10:17   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну почему же. Текст ошибки лучше чем ничего.
Не помешает еще узнать что это за типы в параметрах.
И кстати, там где ты эту функу взял, ее описание, там примеров не было?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.08.2013, 19:17   #6
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,770
По умолчанию

Можно еще для Routing придумать свой тип:
Код:
type
  TRouting = array[0..4] of Word;
Тогда сам параметр Routing в объявлении процедуры будет выглядеть как:
Код:
procedure MbxWriteMpCmdWait(
  hDevice: HANDLE , // Device driver handle from MbxOpen()
  PathID: MBXPATHID, // DM/PM path ID from MbxOpenMp()
  const Routing: TRouting,
Vapaamies вне форума Ответить с цитированием
Старый 27.08.2013, 19:24   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов функции dll из программы на C. 8Observer8 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 04.11.2012 23:01
вызов функции из dll в потоке xvs Общие вопросы Delphi 11 29.03.2012 14:11
Вызов функции из DLL Vegas C# (си шарп) 2 19.12.2011 00:57
Вызов функции из DLL(C#) ZverSS88 Помощь студентам 0 25.11.2010 11:27
Вызов функции из dll-ки VVVadim Общие вопросы Delphi 2 28.04.2009 10:37