Автор Тема: Пытаюсь использовать функции из DLL написанной на С++, без результатов.  (Прочитано 953 раз)

0 Пользователей и 1 Гость просматривают эту тему.

dramster

  • Герой форума
  • *****
  • Сообщений: 1130
    • Просмотр профиля
 Нашел я библиотеку dll для работы с ком портами https://www.kernelchip.ru/pcports/PS057.php. Ранее без проблем получалось писать dll на делфи для чтения функций из сторонних библиотек dll. Как пример вот эта тема http://crapware.aidf.org/forum/index.php?topic=4596.msg31508#msg31508 . Там я вызывал функцию как процедуру, и даже так прокатило. Были у меня и еще примеры использования функций из сторонней длл, все работало как часики.

 Но вот с этой библиотекой 'SerialGate.dll' что-то никак не вяжется. Выдает ошибку "Точка входа в процедуру 'имя ф-ции' не найдена в библиотеке DLL". То есть, якобы этой функции там нет  :(

 Там на сайте автора https://www.kernelchip.ru/pcports/PS057.php и https://www.kernelchip.ru/pcports/PS058.php и  https://www.kernelchip.ru/pcports/PS059.php есть исходники, но я в C++ полный ноль, да и в Delphi не ас.


 Если кто-то из читателей данной темы в курсе как там все работает, не пожалейте пару минут на общее благо. Гляньте по ссылкам и проверьте в чем моя ошибка. Хочу написать DLL для общения кликермана с arduino micro.

Мои попытки чтения функций из 'SerialGate.dll':
Код: Clickermann
  1. library cmann_plugin;
  2.  
  3. uses  SysUtils, Winapi.Windows;
  4.  
  5. function Open(port : integer; baud : integer) : boolean; stdcall; external 'SerialGate.dll'; //берем из 'SerialGate.dll' функцию 'Open'
  6.  
  7. //------------------------------------------------------------------------------
  8. // Основное тело функции, идет на экспорт, вызывается из кликера
  9. function execute( _mas: pInteger; _size: Integer): Integer; export; stdcall;
  10. type
  11.  pIntArr = array[0..0] of Integer;
  12. var
  13.  port_input : integer;
  14.  res : integer;
  15. begin
  16.  port_input := pIntArr(_mas^)[0]; //читаем параметр порта из кликермана
  17.  
  18.  if Open(port_input, 19200) then res := 1 else res := 2; //пытаемся открыть порт и результат сего действия возвращаем кликерману.
  19.  
  20.  result := res;
  21.  
  22. end;
  23. //------------------------------------------------------------------------------
  24.  
  25. // список экспорта
  26. exports execute;
  27.  
  28. begin
  29.  // тело пусто
  30. end.

Спасибо всем заранее  :) .
« Последнее редактирование: Январь 16, 2021, 11:45:36 pm от dramster »

ya12

  • Активный участник
  • ***
  • Сообщений: 160
    • Просмотр профиля
В Дельфи разбираюсь слабо, в Си еще хуже.
В Си соглашение dllexport, у Дельфи соглашение  stdcall, а равны ли они?

dramster

  • Герой форума
  • *****
  • Сообщений: 1130
    • Просмотр профиля
В Дельфи разбираюсь слабо, в Си еще хуже.
В Си соглашение dllexport, у Дельфи соглашение  stdcall, а равны ли они?

Да, скорее всего в этом и проблема была. Пол дня изучения и чтения форумов и статей. :( .
Есть выход, но в данном случае он не применим. долго объяснять и вспоминать почему.
Короче тырить функции из чужих длллок это плохо  :)... занимает много времени.
Кинул я дурное и начал писать сам. Вот первоначальный, и рабочий вариант
 http://crapware.aidf.org/forum/index.php?topic=5529.0  . Возможно кто-либо найдет недочеты и косяки
« Последнее редактирование: Февраль 12, 2021, 11:17:22 am от dramster »