![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Уже не первый день пытаюсь воспользоваться хоть одной функцией из 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.Помогите, пожалуйста, хотя бы начать. Файлы с SDK и демо-программами+исходники приложить не получилось, поэтому вставлю ссылки Communication Protocol SDK(32Bit Ver6.2.4.1) Communication Protocol SDK(64Bit Ver6.2.4.1) |
|
#2
|
|||
|
|||
|
Ну,
1. Тебе точно нужна 32-битная (которая x86). x64 ты в 32 битный процесс без танцев с бубнами не загрузишь. А Delphi 7 генерит именно 32 битный код. 2. Надо смотреть, что за тип VARIANT_BOOL. Походу, это ShortInt. 3. BSTR - это будет WideString 4. Integer и так по дефолту LongInt 5. cdecl - правильно, если это нативная С функция (т.е. в исходниках НЕ PASCAL) Код:
type VARBOOL = ShortInt; const VARBOOL_TRUE : VARBOOL = -1; VARBOOL_FALSE : VARBOOL = 0; function Net_Connect(IPAdd: WideString; Port: Integer) : VARBOOL; cdecl; external 'zkemkeeper.dll'; Ну и обращение будет такое примерно: Код:
if Net_Connect(WideString('127.0.0.1'),8080) = VARBOOL_TRUE
Then ShowMessage('Connected')
Else ShowMessage('Error');Последний раз редактировалось lmikle, 13.09.2017 в 01:51. |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
DIEsel (13.09.2017)
| ||
|
#3
|
|||
|
|||
|
как ни пытался встроить вашу конструкцию, делфи все время ругается на синтаксис, а в силу неопытности не могу понять, что ему не нравится, и где тогда это все должно быть. Попробовал сделать так - не помогло:
Connect_Net: function (IPAdd:WideString; Port:Integer): ShortInt; cdecl; Меня еще сильно напрягает, что даже процедура без параметров не поддается! [Definition] Disconnect(void) [Usage] Disconnect from the device and release related resources. [Parameter] None [Return Value] None Код:
procedure TForm1.Button1Click(Sender: TObject);
var W1:WideString;
B1:TBSTR;
L1:Longint;
dHandle:THandle;
Disconnect: procedure (); stdcall; //cdecl тоже не помог
begin
@Disconnect:=nil;
dHandle:=LoadLibrary('zkemkeeper.dll');
if dHandle<>0 then
begin
ShowMessage('DLL Load');
@Disconnect:=GetProcAddress(dHandle, 'Disconnect');
if @Disconnect<>nil then ShowMessage('Happy');
FreeLibrary(dHandle);
end
else
ShowMessage('Load DLL Fail!');
end;То есть даже указатель на процедуру не получается. |
|
#4
|
|||
|
|||
|
Во первых, это AxtiveX сервер, никаких Net_Connect эта библиотека не экспортирует.
1)Сначала нужно её зарегистрировать. >regsvr32 zkemkeeper.dll 2)Затем из Дельфи Меню->Component->Import ActiveX Control...Выбрать ZKEMKeper и нажать Install. 3)Если всё правильно, то на палитре компонент на вкладке ActiveX появится компонент TCZKEM Кидаешь его на форму ... |
| Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
DIEsel (13.09.2017)
| ||
|
#5
|
|||
|
|||
|
Спасибо большое! Буду благодарен, если расскажите, как вы вообще определили, что это такое?
Вечером попробую функции ![]() |
|
#6
|
|||
|
|||
|
BSTR - первый признак, что это ActiveX
Затем смотрим, что экспортирует библиотека. |
| Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
DIEsel (13.09.2017)
| ||