Author Topic: Пытаюсь использовать функции из DLL написанной на С++, без результатов.  (Read 2932 times)

0 Members and 1 Guest are viewing this topic.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
 Нашел я библиотеку 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':
Code: (clickermann) [Select]
library cmann_plugin;

uses  SysUtils, Winapi.Windows;

function Open(port : integer; baud : integer) : boolean; stdcall; external 'SerialGate.dll'; //берем из 'SerialGate.dll' функцию 'Open'

//------------------------------------------------------------------------------
// Основное тело функции, идет на экспорт, вызывается из кликера
function execute( _mas: pInteger; _size: Integer): Integer; export; stdcall;
type
  pIntArr = array[0..0] of Integer;
var
  port_input : integer;
  res : integer;
begin
  port_input := pIntArr(_mas^)[0]; //читаем параметр порта из кликермана

  if Open(port_input, 19200) then res := 1 else res := 2; //пытаемся открыть порт и результат сего действия возвращаем кликерману.

  result := res;

end;
//------------------------------------------------------------------------------

// список экспорта
exports execute;

begin
  // тело пусто
end.

Спасибо всем заранее  :) .
« Last Edit: January 16, 2021, 11:45:36 PM by dramster »

ya12

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

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
В Дельфи разбираюсь слабо, в Си еще хуже.
В Си соглашение dllexport, у Дельфи соглашение  stdcall, а равны ли они?

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