Fremde C-Api-Dll laden und arbeiten

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
miwe-pos
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 28
Registriert: Mi, 26. Dez 2018 18:13

Fremde C-Api-Dll laden und arbeiten

Beitrag von miwe-pos »

Problem nach dem Laden werden nicht die Funktionen/Klassen angezeigt!
Rückgabe leere Arrays!
Programmcode:
nret:=DllLoad("WormAPI.dll") //=43057152
xret :=DllInfo(nret,DLL_INFO_HANDLE) //=43057152
xret :=DllInfo(nret,DLL_INFO_NAME) //="WormAPI.dll"
xret :=DllInfo(nret,DLL_INFO_PATHNAME) // =path+"WormAPI.dll"
xret :=DllInfo(nret,DLL_INFO_LOADED) // =.T.
xret :=DllInfo(nret,DLL_INFO_TYPE) // = 1
xret :=DllInfo(nret,DLL_INFO_LIST) // ={}
xret :=DllInfo(nret,DLL_INFO_PREFIX) // =""
xret :=DllInfo(nret,DLL_INFO_UNLOADABLE) // =.F.
xret :=DllInfo(nret,DLL_INFO_USAGELIST) // ={}
xret :=DllInfo(nret,DLL_INFO_FUNCLIST) // ={}
xret :=DllInfo(nret,DLL_INFO_CLASSFUNCLIST) //={}
//Aufruf von bekannten Funktionen der Dll
xret :=DllCall(nret,DLL_CDECL,"worm_getVersion",@p1,@p2) //=43086132
xret :=DllCall(nret,DLL_CDECL,"worm_info_new",@p1,@p2) //=1492080
//Ende Code

Was mache ich falsch oder woran könnte es liegen?
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15378
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 24 Mal
Danksagung erhalten: 10 Mal
Kontaktdaten:

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von brandelh »

Du solltest DIR dringend die Dokumentation zu DLLLOAD() etc. durchlesen !
Xbase++ Hilfe hat geschrieben: DllInfo()
Retrieves runtime information about loaded DLLs.

DllInfo( [<cDllName>|<nDllHandle>], <nDllInfo> ) --> xValue
...
Description
The function is used to obtain various information about one or more DLL(s) created with Xbase++.
Also KEINE C oder API Dlls !

Damit wir beurteilen können, was die DLL benötigt, müssten wir die C oder Delphi Definition der Funktion sehen !
DLLLoad() gibt nie ein Array sondern eine LONG Variable zurück, das kann aus der DLL ein Pointer auf Strukturen sein, damit kann Xbase++ selbst aber nichts automatisch anfangen.
Die Parameter mit @ ... können Werte aufnehmen, wenn die Variable lang genug war (eine DLL verlängert nicht !)

PS: das sind keine "Allgemeinen Fragen" sondern "Windows, API" (eventuell wird der Name noch verlängert auf Fremde DLLs), daher verschiebe ich wieder den Beitrag dort hin.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12527
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von AUGE_OHR »

hi,
miwe-pos hat geschrieben: Do, 16. Jan 2020 14:35 Problem nach dem Laden werden nicht die Funktionen/Klassen angezeigt!
Was mache ich falsch oder woran könnte es liegen?
Du "erwartest" zu viel ... :wink:

wie schon gesagt wurde funktioniert DllInfo() oder ClassInfo() nur nur mit Xbase++ Sachen und nicht z.b. mit ActiveX (was auch eine DLL ist)

Frage : kommt die C-DLL vor dir oder ist es eine 3-PP DLL :?:

wenn es eine 3-PP DLL ist gibt es gewöhnlich eine API-Beschreibung die man sich ansehen sollte.

bei unbekannten DLL helfe ich mir mit Dependency Wolker oder Spy++ um die Function Namen zu erfahren.
damit kann ich dann die "Einsprung" Adresse raus bekommen um mich dann an den (unbekannten) Parametern zu versuchen.

mit "pure" Xbase++ kommt man nicht sehr weit wenn Daten "ausgetauscht" werden sollen und dafür eine Structure benötigt wird.
ich verwende deshalb Ot4xb was auch bei der weiteren Verarbeitung der Daten die entsprechende Function bereit hält.

---

damit wir helfen können benötigen wir mehr Informationen oder ein Beispiel wo es bei dir harkt.
wie schon gesagt muss man erst die API-Beschreibung lesen um sich ein Bild zu machen wie weit man mit Xbase++ kommt.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15378
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 24 Mal
Danksagung erhalten: 10 Mal
Kontaktdaten:

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von brandelh »

AUGE_OHR hat geschrieben: Do, 16. Jan 2020 20:09 wenn es eine 3-PP DLL ist gibt es gewöhnlich eine API-Beschreibung die man sich ansehen sollte.
nicht so schwammig ;-)

man muss die API Definition genau lesen und richtig umsetzen, sonst bekommt man nicht nur keine sinnvollen Ergebnisse,
sondern Parameter Fehler können zu großen Problemen führen, wenn im schlimmsten Falle unbemerkt andere Speicherbereiche überschrieben werden.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12527
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von AUGE_OHR »

brandelh hat geschrieben: Do, 16. Jan 2020 21:41
AUGE_OHR hat geschrieben: Do, 16. Jan 2020 20:09 wenn es eine 3-PP DLL ist gibt es gewöhnlich eine API-Beschreibung die man sich ansehen sollte.
nicht so schwammig ;-)
Ok, ich wollte den neuen User nicht gleich abschrecken was für eine "Arbeit" vor ihm liegen wird.
gruss by OHR
Jimmy
miwe-pos
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 28
Registriert: Mi, 26. Dez 2018 18:13

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von miwe-pos »

Danke am alle für die Antworten.
Die "wormAPI.Dll" ist von swissbit, ein Hersteller der nun für Kassen benötigten TSE(Technische Sicherheitseinrichtung).
Eine umfangreiche API-Beschreibung ist vorhanden, allerdings was die Einbindung in die Kassensoftware betrifft nicht sehr übersichtlich.
Sie liefern diese Dll in drei Varianten (win32-C, win-Std-call, win64-C). Ich wollte mit DLLInfo die dort jeweils enthaltenen Funktionen/Klassen auslesen.
Auge_Ohr,
mit dem Begriff PP-Dll kan ich nichts anfangen?
Wieweit mir "ot4xb" helfen kann, erschließt sich mir nicht auf deren Internetseite?
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15378
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 24 Mal
Danksagung erhalten: 10 Mal
Kontaktdaten:

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von brandelh »

die 64 Bit DLL kann man gleich vergessen.

StdCall ist am einfachsten, aber C geht auch (muss man bei DLLCALL einstellen).
ot4xb hat alle möglichen nützlichen Funktionen, so auch für die Aufrufe der DLL Funktionen.

Die integrierten Funktionen stehen in der DLL am Ende als lesbare Liste, aber ohne Parameter nützt das nix.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12527
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von AUGE_OHR »

miwe-pos hat geschrieben: Fr, 17. Jan 2020 16:53 mit dem Begriff PP-Dll kan ich nichts anfangen?
Wieweit mir "ot4xb" helfen kann, erschließt sich mir nicht auf deren Internetseite?
mit 3-PP meine ich "3rd Party Product" also eine externe DLL / LIB

Ot4xb enthält Function die man an Stelle von Xbase++ Function nutzen kann.
wenn man mit Windows API für Xbase++ arbeiten will kommt man an O4xb kaum vorbei.

Frage : hast du so was schon mal gemacht :?:
gruss by OHR
Jimmy
miwe-pos
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 28
Registriert: Mi, 26. Dez 2018 18:13

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von miwe-pos »

Hallo Auge + Ohr,

ich finde bei mir nicht ot4xb. Woher bekomme ich es? Ich nutze Alaska 2.0.

Gruß
Michael Wetterhahn
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2697
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 33 Mal
Danksagung erhalten: 1 Mal

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von georg »

Hallo, Michael -


ot4xb ist ein Produkt von Pablo Botello. Du findest es auf seiner Seite, xbwin.com
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15378
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 24 Mal
Danksagung erhalten: 10 Mal
Kontaktdaten:

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von brandelh »

mit der 2.00 kann man auch den EXTERN Befehl nutzen
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12527
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben: So, 23. Feb 2020 19:23 mit der 2.00 kann man auch den EXTERN Befehl nutzen
solange man nicht mit Windows Structure arbeiten muss funktionieren auch einfache DLL Befehle
mit BAP kann man zwar auch Structure nachbilden aber nicht wenn die rekursive auf andere Structure zugreifen.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12527
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von AUGE_OHR »

miwe-pos hat geschrieben: So, 23. Feb 2020 16:27 ich finde bei mir nicht ot4xb. Woher bekomme ich es? Ich nutze Alaska 2.0.
ob du Xbase++ v2.x verwendest oder nicht spielt bei 3-PP keine Rolle ... es ist Windows :!:

Xbase++ läuft zwar unter Windows aber es bietet dem User keine Möglichkeit "C" Source direkt einzubinden.
man muss sich also selbst eine Schnittstelle bauen wobei Xbase++ selbst nur wenig "Werkzeuge" dafür bereit stellt.

---

wenn du es nicht selbst schaffst würde ich mich nach einem Programmierer umsehen der sich mit solchen Sachen auskennt.
Pablo zu fragen ist eine Möglichkeit ... aber da wirst du einige Zeit warten müssen bis er Zeit hat.

es ist ja wohl eine "allgemeines" Problem für die Schweizer Programmierer ... vielleicht sollte ihr zusammen nach einer Lösung suchen.
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14061
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 6 Mal
Danksagung erhalten: 30 Mal
Kontaktdaten:

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von Jan »

AUGE_OHR hat geschrieben: So, 23. Feb 2020 23:14es ist ja wohl eine "allgemeines" Problem für die Schweizer Programmierer ... vielleicht sollte ihr zusammen nach einer Lösung suchen
Welche schweizer Programmierer? In diesem Thread sehe ich keinen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2091
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 7 Mal
Danksagung erhalten: 22 Mal

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von ramses »

Hallo MIWE-Pos

Dein Freund auf dem weiteren Weg ist das Handbuch der DLL dorf findest du das was du mit dllInfo() suchen wolltest.

Mit einigen Beispielen die du einfach auf xbase++ umschreiben musst.

Die DLL selbst kann wie jede andere Fremd DLL z.B. List&Label usw. angesprochen werden.

Ich habe schon xbase++ Code gesehen der mit Swissbit DLL's und deren Hardware kommuniziert.
Leider ist es nicht mein Code, ich habe diesen auch nicht. Daher kann dir nicht mit Mustern weiterhelfen.
Selbst benötige ich diese Sicherheitsmodule nicht.
Valar Morghulis

Gruss Carlo
miwe-pos
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 28
Registriert: Mi, 26. Dez 2018 18:13

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von miwe-pos »

Hat jemand eine Idee?
Durch Stromausfall musste ich meinen einen PC neu einrichten. Das Programm(TSE-Swissbit), was auf dem anderen exakt läuft, liefert mir nun nach der Neueinrichtung folgenden Fehler:
Error BASE/2107
Description : dllPrepareCall
Thread ID : 1
Called from WORM_GETVERSION(159)
Called from TSE_VERSION(266)
Called from MAIN(65)
Aufrufkonvention:
EXTERN STDCALL STRING worm_getVersion( ) in WormAPI.dll
Aufruf:
TSEVers := worm_getVersion()

Das laufwerk auf dem das Programm läuft ist frei gegeben. Im Pfad befindet sich die WormAPI.DLL, auf die man freien Zugriff hat.
Die einzige Möglichkeit sehe ich noch im Kaspersky Antiviren Programm?!
Gruß Michael
Udo
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 31
Registriert: Do, 18. Okt 2007 15:37

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von Udo »

Hallo Michael,

was ist denn aus deinem Problem geworden?
Ich habe heute den selben Fehler auf dem System eines Kunden.
Auf mehreren anderen Systemen läuft das gleiche Programm ohne Probleme.
oError:args :
-> VALTYPE: C VALUE: WormApi.dll
-> VALTYPE: N VALUE: 270344
-> VALTYPE: C VALUE: worm_init
-> VALTYPE: N VALUE: 262144
-> VALTYPE: N VALUE: 589824
oError:canDefault : Y
oError:canRetry : N
oError:canSubstitute: N
oError:cargo : NIL
oError:description : DLL couldn't be loaded
oError:filename :
oError:genCode : 142
oError:operation : dllPrepareCall
oError:osCode : 0
oError:severity : 2
oError:subCode : 2107
oError:subSystem : BASE
oError:thread : 4
oError:tries : 0

Glück Auf
Udo
Udo
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 31
Registriert: Do, 18. Okt 2007 15:37

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von Udo »

Nachtrag,

falls das mal jemand sucht -
Die WormApi.dll benötigt eine installierte Microsoft C-Runtime, um geladen werden zu könnnen: vcruntime140.dll
Im meinem konkreten Fall brauchte ich die DLL für x86 und sie musste im Verzeichnis ..\windows\sysWOW64 liegen.
Die DLL ist im Paket vc_redist.x86.exe enthalten und kann damit installiert werden.
Siehe auch https://support.microsoft.com/de-de/hel ... -downloads
Der entscheidende Hinweis kam vom Alaska Support (bedankt!)

Glück Auf!
Udo
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2091
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 7 Mal
Danksagung erhalten: 22 Mal

Re: Fremde C-Api-Dll laden und arbeiten

Beitrag von ramses »

Mit einem andern Produkt / DLL kenne ich das Problem auch.
Bei dieser reicht es wenn sich die vcruntime140.dll im selben Pfad befindet wie die EXE Datei und die eigenen xbase-Runtimes.
Seit dem packe ich die vcruntime140.dll immer zu den den eigenen Runtime-DLLs und hatte seitdem auch nie mehr Probleme.
Valar Morghulis

Gruss Carlo
Antworten