Seite 1 von 1

Fremde C-Api-Dll laden und arbeiten

Verfasst: Do, 16. Jan 2020 14:35
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?

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: Do, 16. Jan 2020 14:58
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.

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: Do, 16. Jan 2020 20:09
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.

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: Do, 16. Jan 2020 21:41
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.

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: Fr, 17. Jan 2020 0:27
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.

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: Fr, 17. Jan 2020 16:53
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?

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: Fr, 17. Jan 2020 18:10
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.

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: Fr, 17. Jan 2020 22:09
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 :?:

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: So, 23. Feb 2020 16:27
von miwe-pos
Hallo Auge + Ohr,

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

Gruß
Michael Wetterhahn

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: So, 23. Feb 2020 17:59
von georg
Hallo, Michael -


ot4xb ist ein Produkt von Pablo Botello. Du findest es auf seiner Seite, xbwin.com

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: So, 23. Feb 2020 19:23
von brandelh
mit der 2.00 kann man auch den EXTERN Befehl nutzen

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: So, 23. Feb 2020 23:01
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.

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: So, 23. Feb 2020 23:14
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.

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: Mo, 24. Feb 2020 5:57
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

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: Mo, 24. Feb 2020 11:06
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.

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: Mi, 08. Apr 2020 16:59
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

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: Fr, 19. Feb 2021 11:27
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

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: Di, 23. Feb 2021 18:53
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

Re: Fremde C-Api-Dll laden und arbeiten

Verfasst: Di, 23. Feb 2021 19:56
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.