Показать сообщение отдельно
  #1  
Старый 12.09.2017, 19:25
DIEsel DIEsel вне форума
Прохожий
 
Регистрация: 09.09.2016
Сообщения: 14
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Импорт функции из DLL (предположительно, написана на С)

Уже не первый день пытаюсь воспользоваться хоть одной функцией из SDK ZKTeco, но пока безуспешно. Раньше с таким не сталкивался, поиски на просторах интернета дали слабые результаты (перешел на динамическую загрузку - программа уже начала запускаться!)
Пытаюсь хотя бы подключиться или просто получить указатель на функцию - не выходит.
Так выглядит описание функции в мануале:

Connect_Net
[Definition] VARIANT_BOOL Connect_Net( [in] BSTR IPAdd, [in] long Portl)
[Usage] Connect to the device via the IP address and set up a network connection with the device.
[Parameter]
IPAdd: IP address of the device
Port: Port number used for connecting to the device. The default value is 4370.
[Return Value] Return True if it is successful, or return False.
[Related Function] Disconnect, Connect_Com, Connect_USB

Код небольшой программы следующий
Код:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ActiveX;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var W1:AnsiString;
    B1:TBSTR;
    L1:Longint;
    dHandle:THandle;
    Connect_Net: function (IPAdd:String; Port:Longint): boolean; cdecl; // stdcall не помогал
begin
@Connect_Net:=nil;
dHandle:=LoadLibrary('zkemkeeper.dll');
if dHandle<>0 then
  begin
  ShowMessage('DLL Load');
  @Connect_Net:=GetProcAddress(dHandle, 'Connect_Net');
  if @Connect_Net<>nil then
    begin
    W1:='192.168.1.201';
    B1:=Pointer(W1);
    L1:=4370;
    if Connect_Net(B1,L1) then
    ShowMessage('Connect!');
    end
  else
    begin
    ShowMessage('Import function Fail!');
    Exit;
    end;
  FreeLibrary(dHandle);
  end
else
  ShowMessage('Load DLL Fail!');
end;

end.
Вообще есть два архива с документацией и демо-программами с исходниками на C# (откуда я сделал вывод, что zkemkeeper - нужная библиотека): х86 и х64, на моем ноуте система х64 и Delphi 7, и нормально устанавливаются библиотеки х64, но с ними даже библиотека в программе не загружается, х86 ставиться не желают, но программа с библиотекой хоть как-то дружит.
Помогите, пожалуйста, хотя бы начать.
Файлы с SDK и демо-программами+исходники приложить не получилось, поэтому вставлю ссылки
Communication Protocol SDK(32Bit Ver6.2.4.1)
Communication Protocol SDK(64Bit Ver6.2.4.1)
Ответить с цитированием