Чтение dll библиотеки написанной на C++ Builder 5 в Lazarus

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Чтение dll библиотеки написанной на C++ Builder 5 в Lazarus

Сообщение basilcat » 11.01.2020 16:14:49

Чтение dll библиотеки написанной на C++ Builder 5 в проекте Lazarus версии 2.0.4 с FPC 3.0.4
Возможно ли прочитать DLL библиотеку содержащую процедуры (void) и функции, которые легко читаются в приложении Delphi 7 по схеме:
Код: Выделить всё
const
    zlib1='origlibrary.dll';

function CreateDrives(aX, aY,aZ,a:double; path:string):integer;cdecl;external zlib1 name 'CreateDrives';
procedure PVTInitDrivers()cdecl;external zlib1 name '_InitDrivers';
...


при отсутствии исходников этой DLL.
Спасибо.

Для ЗНАТОКОВ: basil_cat@ukr.net
basilcat
незнакомец
 
Сообщения: 4
Зарегистрирован: 19.06.2019 17:16:34

Re: Чтение dll библиотеки написанной на C++ Builder 5 в Laza

Сообщение Vadim » 11.01.2020 16:19:22

basilcat писал(а):Возможно ли прочитать DLL библиотеку содержащую процедуры (void) и функции, которые легко читаются в приложении Delphi 7

А сами Вы почему не решились попробовать? Если исходников нет и невозможно посмотреть заголовок, есть ли там сишная обвязка (обычно есть), то Вы будете до гробовой доски ждать ответа на подобный вопрос, потому что эта библиотека находится только у Вас и никто, кроме Вас, не сможет проверить то, что Вы спрашиваете... ;-) :D
Vadim
долгожитель
 
Сообщения: 3857
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Чтение dll библиотеки написанной на C++ Builder 5 в Laza

Сообщение Снег Север » 11.01.2020 16:22:05

Должно работать. Только надо не забывать, что path:string - это ANSI string.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2357
Зарегистрирован: 27.11.2007 16:14:47

Re: Чтение dll библиотеки написанной на C++ Builder 5 в Laza

Сообщение basilcat » 11.01.2020 17:03:09

Пробовал различными способами и через обёртку (по другому никак). Если создавать dll в Lazarus (Unit_DLL.dll) , то всё нормально читается. Если сишная (origlibrary.dll) то dllhandle=0;
Дллки:
https://fex.net/ru/s/8tkznzy

Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Windows;
const
// zlib1='origlibrary.dll';
      zlib1='Unit_DLL.dll';
type
  TSomefun = function(DriveHandle, Input:integer;val:byte):integer;  cdecl;
  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
  i: integer;
  dllhandle: Thandle;
  abs: TSomefun;
  P_M:pointer;
  public

  end;

var
  Form1: TForm1;
//  function _SetDigitInputsDemo(DriveHandle, Input:integer;val:byte):integer; stdcall; external(zlib1);
implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin

   // вызов
     i:= abs(2,3,1);
     Label1.Caption:=IntToStr(i);
end;

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
    // выгрузка
    FreeLibrary(dllhandle);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // загрузка
   dllhandle:= LoadLibrary(zlib1);
  // указатель на функцию
  P_M:= GetProcAddress(dllhandle, '_SetDigitInputsDemo');
  abs:=TSomefun(P_M);

end;

end.



Добавлено спустя 8 минут 10 секунд:
Vadim писал(а):
basilcat писал(а):Возможно ли прочитать DLL библиотеку содержащую процедуры (void) и функции, которые легко читаются в приложении Delphi 7

А сами Вы почему не решились попробовать? Если исходников нет и невозможно посмотреть заголовок, есть ли там сишная обвязка (обычно есть), то Вы будете до гробовой доски ждать ответа на подобный вопрос, потому что эта библиотека находится только у Вас и никто, кроме Вас, не сможет проверить то, что Вы спрашиваете... ;-) :D


См. Ниже Вашего ответа.
basilcat
незнакомец
 
Сообщения: 4
Зарегистрирован: 19.06.2019 17:16:34

Re: Чтение dll библиотеки написанной на C++ Builder 5 в Laza

Сообщение Alex2013 » 11.01.2020 20:57:23

Возможно там просто ошибка в имени ... ( то есть настоящие имя XXX_SetDigitInputsDemo - подчеркивание в начале обычно указывает на префикс например "CV_BGR2HLS" ')
Alex2013
долгожитель
 
Сообщения: 1634
Зарегистрирован: 03.04.2013 11:59:44

Re: Чтение dll библиотеки написанной на C++ Builder 5 в Laza

Сообщение Дож » 11.01.2020 21:14:15


origlibrary.dll 32-битная
Unit_DLL.dll 64-битный
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 817
Зарегистрирован: 12.10.2008 16:14:47

Re: Чтение dll библиотеки написанной на C++ Builder 5 в Laza

Сообщение Снег Север » 12.01.2020 08:16:48

О, это просто классическая ошибка - попытка пристегнуть к программе dll другой битности...
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2357
Зарегистрирован: 27.11.2007 16:14:47


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: MailRu[bot] и гости: 5

Рейтинг@Mail.ru