AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Benötige Hilfe bei der Nutzung einer DLL

Benötige Hilfe bei der Nutzung einer DLL

Ein Thema von divBy0 · begonnen am 4. Sep 2012 · letzter Beitrag vom 7. Sep 2012
Antwort Antwort
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#1

Benötige Hilfe bei der Nutzung einer DLL

  Alt 4. Sep 2012, 23:20
Hallo zusammen,

ich habe eine DLL um Daten mit einem externen Gerät auszutauschen. Eine Beispielanwendung in VB ist dabei, allerdings funktioniert diese nicht.

Hier mal ein Ausschnitt aus der DLL:

Code:
#pragma once

#ifdef LKIF2_EXPORTS
#define EXP __declspec(dllexport)
#else
#define EXP __declspec(dllimport)
#endif

#include "Winsock2.h"

// Return Code List
typedef enum {   
   RC_OK = 0x0000,            // The operation is completed successfully.
   ///////////////////////////////////////////////
   // Communication error from controller notification
   //
   RC_NAK_COMMAND = 0x1001,   // Command error
   RC_NAK_COMMAND_LENGTH,      // Command length error
   RC_NAK_TIMEOUT,            // Timeout
   RC_NAK_CHECKSUM,         // Check sum error
   RC_NAK_INVALID_STATE,      // Status error
   RC_NAK_OTHER,            // Other error
   RC_NAK_PARAMETER,         // Parameter error
   RC_NAK_OUT_STAGE,         // OUT calculation count limitation error
   RC_NAK_OUT_HEAD_NUM,      // No. of used head/OUT over error
   RC_NAK_OUT_INVALID_CALC,   // OUT which cannot be used for calculation was specified for calculation.
   RC_NAK_OUT_VOID,         // OUT which specified for calculation is not found.
   RC_NAK_INVALID_CYCLE,      // Unavailable sampling cycle
   RC_NAK_CTRL_ERROR,         // Main unit error
   RC_NAK_SRAM_ERROR,         // Setting value error
   ///////////////////////////////////////////////
   // Communication DLL error notification
   //
   RC_ERR_OPEN_DEVICE = 0x2000,// Opening the device failed.
   RC_ERR_NO_DEVICE,         // The device is not open.
   RC_ERR_SEND,            // Command sending error
   RC_ERR_RECEIVE,            // Response receiving error
   RC_ERR_TIMEOUT,            // Timeout
   RC_ERR_NODATA,            // No data
   RC_ERR_NOMEMORY,         // No free memory
   
   RC_ERR_DISCONNECT,         // Cable disconnection suspected
   RC_ERR_UNKNOWN,            // Undefined error
} RC;   

extern "C"
{
///////////////////////////////////////////////
// Other commands
//
// Opens the USB device.
EXP RC WINAPI LKIF2_OpenDeviceUsb();
// Closes the currently open device.
EXP RC WINAPI LKIF2_CloseDevice();
}
Der Datentyp RC sieht bei mir so aus:

Delphi-Quellcode:
TKeyenceRC = (
              // Return Code List
              RC_OK = $0000,            // The operation is completed successfully.
              ///////////////////////////////////////////////
              // Communication error from controller notification
              //
              RC_NAK_COMMAND = $1001,   // Command error
              RC_NAK_COMMAND_LENGTH,      // Command length error
              RC_NAK_TIMEOUT,            // Timeout
              RC_NAK_CHECKSUM,         // Check sum error
              RC_NAK_INVALID_STATE,      // Status error
              RC_NAK_OTHER,            // Other error
              RC_NAK_PARAMETER,         // Parameter error
              RC_NAK_OUT_STAGE,         // OUT calculation count limitation error
              RC_NAK_OUT_HEAD_NUM,      // No. of used head/OUT over error
              RC_NAK_OUT_INVALID_CALC,   // OUT which cannot be used for calculation was specified for calculation.
              RC_NAK_OUT_VOID,         // OUT which specified for calculation is not found.
              RC_NAK_INVALID_CYCLE,      // Unavailable sampling cycle
              RC_NAK_CTRL_ERROR,         // Main unit error
              RC_NAK_SRAM_ERROR,         // Setting value error
              ///////////////////////////////////////////////
              // Communication DLL error notification
              //
              RC_ERR_OPEN_DEVICE = $2000,// Opening the device failed.
              RC_ERR_NO_DEVICE,         // The device is not open.
              RC_ERR_SEND,            // Command sending error
              RC_ERR_RECEIVE,            // Response receiving error
              RC_ERR_TIMEOUT,            // Timeout
              RC_ERR_NODATA,            // No data
              RC_ERR_NOMEMORY,         // No free memory

              RC_ERR_DISCONNECT,         // Cable disconnection suspected
              RC_ERR_UNKNOWN            // Undefined error
             );
Die beiden Funktionen sehen bei mir aktuell so aus:

Delphi-Quellcode:
const
  DLLNAME = 'LKIF2.dll';

function LKIF2_OpenDeviceUsb: TKeyenceRc; stdcall; external DLLNAME;
function LKIF2_CloseDevice: TKeyenceRC; stdcall; external DLLNAME;
Ist das so korrekt? Fehler bekomme ich nämlich keine beim Aufruf, einzig im ProcessMonitor wird mir beim Aufruf der Funktionen "NAME NOT FOUND" angezeigt (siehe ProcessMonitor.png).

Kann mir da vielleicht jemand was zu sagen?

Danke
Miniaturansicht angehängter Grafiken
processmonitor.png  
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.097 Beiträge
 
Delphi 12 Athens
 
#2

AW: Benötige Hilfe bei der Nutzung einer DLL

  Alt 4. Sep 2012, 23:37
Eigentlich sollte Delphi auch sowas, wie "Prozedureinsprungpunkt nicht gefunden" rauswerfen.

Sicher daß diese Funktion genau als "LKIF2_OpenDeviceUsb" in der DLL exportiert werden?
Andere Sprachen hängen gerne mal Prefixe und vorallem Sufixe an den Exportnamen. (meißt wird gerne noch eine Parametersignatur angehängt)


[edit]
Zitat:
einzig im ProcessMonitor wird mir beim Aufruf der Funktionen "NAME NOT FOUND" angezeigt (siehe ProcessMonitor.pn
Deine Beschreibung klang nach was Anderem.

Tja, da scheint wohl irgendein Registryzugriff in dieser Funktion nicht ordentlich laufen.

z.B. Beim Versuch mit Schreibrechten zugreifen zu wollen, obwohl ein "Benutzer" in HKLM nur Leserechte besitzt.


Du kannst ja mal versuchen deine Anwendung mit Adminrechten zu starten.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Sep 2012 um 23:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Benötige Hilfe bei der Nutzung einer DLL

  Alt 4. Sep 2012, 23:53
Adminrechte bringen keine Veränderung, habe ich auch schon getestet.

Ich gehe davon aus, dass der Hersteller da nochmal ran muss.
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
soulies

Registriert seit: 9. Dez 2005
234 Beiträge
 
#4

AW: Benötige Hilfe bei der Nutzung einer DLL

  Alt 5. Sep 2012, 12:58
hoi,

funktioniert es wenn Du die Aufrufkonvention von "stdcall" nach "cdecl" änderst ?

<OffTopic>
Ist das LKxxx Gerät ein Laser ?

Ich meine der Hersteller hat ja auch ne eigene Software mit dem "Navigator".
Wenn seine Anwendung mit der "LKIF2.dll" läuft - müsste es ja generell klappen oder ?
</OffTopic>

cya
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Benötige Hilfe bei der Nutzung einer DLL

  Alt 5. Sep 2012, 22:59
Ja, es ist ein Laser. Die LK-Navigator Software funktioniert, parametrieren kann ich das Gerät auch.

Die DLL habe ich vom Support bekommen, damit sollte ein Datenaustausch mit dem Auswertegerät möglich sein. Eine Beispielanwendung in VB6 ist auch dabei, nur funktioniert diese genauso wenig.

Die LK-Navigator Software nutzt die LKIF2.DLL nicht.
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Benötige Hilfe bei der Nutzung einer DLL

  Alt 6. Sep 2012, 06:22
Hallo,

wenn die VB-Anwendung nicht läuft,
sind die Schuld.

Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: Benötige Hilfe bei der Nutzung einer DLL

  Alt 6. Sep 2012, 06:45
Kann es sein dass ein Paket/DLL fehlt/nicht registriert ist?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Benötige Hilfe bei der Nutzung einer DLL

  Alt 7. Sep 2012, 11:27
Es scheint wirklich an der DLL zu liegen. Am Montag weiß ich mehr, da möchte sich der Keyence-Entwickler bei mir melden.

Alles was ich bekommen habe ist ein Archiv mit 3 DLLs (LKIF2.DLL und 2 weitere, die von der LKIF2.DLL benötigt werden) eine HTML-Hilfe zu den Funktionen der DLL und die Beispielanwendung in VB6.
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: Benötige Hilfe bei der Nutzung einer DLL

  Alt 7. Sep 2012, 11:39
mal versuchsweise regsvr32 auf die DLL's losgelassen?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz