Autor Thema: Unlock_Device aus easy_com.dll mit Delphi  (Gelesen 7151 mal)

Offline Michael~F

  • Jr. Member
  • **
  • Beiträge: 56
Unlock_Device aus easy_com.dll mit Delphi
« am: August 03, 2009, 03:47:58 Vormittag »
Wenn ich Unlock_Device aufrufe, bekomme von der dll einen Rückgabewert, der besagt, dass ein falscher Parameter übergeben wurde:
function Unlock_Device(net_id: Byte; szPassword: PChar; Errorcode: Pointer):  integer; stdcall; external 'EASY_COM.DLL' name 'Unlock_Device';
Da allerdings Lock_Device funktioniert, muss der Fehler beim Passwort liegen:
function Lock_Device(net_id: Byte; Errorcode: Pointer): integer; stdcall; external 'EASY_COM.DLL' name 'Lock_Device';
Der Fehler hat auch nichts damit zu tun, dass das PW evtl. falsch wäre, soweit kommt es garnicht ... es ist die bloße Übergabe des "falschen" Parameters, die diesen Fehler auslöst.

Offline Knodelpa

  • easy god
  • *****
  • Beiträge: 1410
  • I love easy-Forum.net
Re: Unlock_Device aus easy_com.dll mit Delphi
« Antwort #1 am: August 03, 2009, 10:01:55 Vormittag »
Hallo Michael,

habe gerade deinen Beitrag gelesen und dann ist mir auch eingefallen, dass ich auf deine PM nicht geantwortet hatte - war in den letzten Wochen etwas im Stress :-(, sorry.

Die Passwortgeschichte habe ich mit Delhi auch noch nicht realisiert. Ich kann mir fast nur vorstellen, dass es am Stringtyp liegt. Delphi unterscheidet hier doch zwei Typen: den normalen Pasal String und den nullterminierten PCHar.
Ich denke die DLL verlangt den zweiten Typ.

Gruß Paul

Offline Michael~F

  • Jr. Member
  • **
  • Beiträge: 56
Re: Unlock_Device aus easy_com.dll mit Delphi
« Antwort #2 am: August 03, 2009, 10:16:50 Vormittag »
Lt. Beschreibung muss es ein Nullterminierter String (PChar) sein. Allerdings ist es ziemlich egal, was ich nehme, ob String oder PChar es klappt einfach nicht. Man müsste wissen, was die genauen Bedingungen sind, unter denen diese Funktion den entspr. Rückgabewert liefert.


P.S.: Ich hab mittlerweile die easyComAip komplett nach Pascal übersetzt und es funktioniert soweit, bis auf Unlock_Device.

Da ich keine Lust hatte mich in OPS einzuarbeiten, baue ich mir übrigens gerade einen eigenen Server. Hier fehlt mir jetzt nur noch die JavaScript-API ;) ... aber die ist auch bald fertig und dann kann ich meine Anlage von überall über eine normale Webseite steuern (ohne Plugins im Browser).
« Letzte Änderung: August 03, 2009, 10:23:15 Vormittag von Michael~F »

Offline edu31

  • Jr. Member
  • **
  • Beiträge: 76
Re: Unlock_Device aus easy_com.dll mit Delphi
« Antwort #3 am: August 05, 2009, 17:31:45 Nachmittag »
Hallo Michael,

wie sieht denn konkret dein Unlock_Device Aufruf aus?
Ich frage, weil man laut Doku je nach easy-Typ einen String aus exakt 4 bzw. 6 Dezimalziffern angeben muss - also inklusive führender Nullen.

Gruß
Eduard

Offline Michael~F

  • Jr. Member
  • **
  • Beiträge: 56
Re: Unlock_Device aus easy_com.dll mit Delphi
« Antwort #4 am: August 05, 2009, 22:18:35 Nachmittag »
Deklaration
function Unlock_Device(net_id: Byte; szPassword: PChar; Errorcode: Pointer): integer; stdcall; external 'EASY_COM.DLL' name 'Unlock_Device';
function Lock_Device(net_id: Byte; Errorcode: Pointer): integer; stdcall; external 'EASY_COM.DLL' name 'Lock_Device';

Aufruf
var
n: integer;
s1: string;
y1, y2: Byte;
p1: Pointer;
begin
          y1 := 1;
            s1 := '0000';
            y2 := 0;
            p1 := @y2;
            n := Unlock_Device(y1, PChar(s1), p1);


Danach ist n dann 1. Wäre das Passwort falsch, müsste n doch 2 sein und y2=103 ... aber für 1 hab ich keine Erklärung, denn Lock_Device funktioniert. und da ist zumindest die net_id und der Errorcode exakt genauso deklariert. Der einzige Unterschiedist zsPassword.

Offline edu31

  • Jr. Member
  • **
  • Beiträge: 76
Re: Unlock_Device aus easy_com.dll mit Delphi
« Antwort #5 am: August 06, 2009, 17:00:26 Nachmittag »
Hallo Michael,

du hast es zwar nicht explizit reingeschrieben, aber du da beim Aufruf für "net_id" eine 1 übergibst, nehme ich mal an, du kommuniziert mit einer easy800. Dann must du als Passwort "000001" übergeben, denn bei diesem Gerät wie auch beim MFD ist das Passwort 6-stellig.

"0001" wäre nur für easy500 oder 700 korrekt gewesen, weil dort 4-stellig.

Laut Doku ist  "0000" kein zulässiger Parameterwert.
Wenn du am Gerät als Passwort 0000 einstellst, dann hast du nämlich den Passwortschutz ausgeschaltet.

Alles klar?

Gruß
Eduard

Offline Michael~F

  • Jr. Member
  • **
  • Beiträge: 56
Re: Unlock_Device aus easy_com.dll mit Delphi
« Antwort #6 am: August 06, 2009, 22:34:47 Nachmittag »
Tatsächlich, es lag nur an den Nullen... aber warum steht so etwas nicht explizit in der Funktionsbeschreibung der Doku? Ich verwende ja keine Passwortschutz und wollte die Funktion ja nur testen, ob sie korrekt implementiert wurde. Lt. Doku ist alle was

[EDIT]In der DOku steht es tatsächlich:
Device system password as 0 terminated chain
{"0001"…"9999" bzw. "000001"…"999999"}
errorcode Indicator on a Byte variable to the saving of error

Aber im Falle von 0000 hätte ich erwaret, dass der Wert ans Device gesendet wird und ggf. von diesem 103 zurück kommt.[/EDIT]
« Letzte Änderung: August 06, 2009, 22:44:06 Nachmittag von Michael~F »