Elster aktuell [ERLEDIGT]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Chris
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 49
Registriert: Fr, 17. Feb 2006 8:51
Wohnort: München
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Elster aktuell [ERLEDIGT]

Beitrag von Chris »

Hallo,

hat jemand von euch bereits die aktuelle Elster - Schnittstelle mit XML für den ERiC-Client eingebunden?

Ich bin da gerade dran und stoße hier und da auf ein paar Probleme. Zum einen wüßte ich gern wie ich das folgende C-Konstrukt in xBase abbilden kann. Ich benötige dieses dann als Übergabe-Parameter für diverse Funktionen, welche über DLLCall angesprochen werden.

Code: Alles auswählen

typedef struct
{
CERT_HANDLE zertifikatHandle;
const char *pin;
} eric_verschluesselungs_parameter_t;
CERT-Handle ist hierbei ein unsigned long.

Ausserdem erhalte ich bei einer Funktion "scheinbar" eine Referenz auf die Ausgabe zurück. Wie kann ich diese auflösen, ist dies überhaupt möglich.

Vielleicht hat ja jemand einen Rat für mich.

Vielen Dank schonmal.

Gruß,
Christian
Zuletzt geändert von Chris am Mo, 19. Nov 2012 17:35, insgesamt 1-mal geändert.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Elster aktuell

Beitrag von brandelh »

Hi,

die Struktur ist sicher ein Parameter aber nicht die Funktion.
der const char* ist ein Pointer auf einen konstanten String.
Die Textrückgabe kann man mit Pablos ot4xb auslesen, siehe den letzten Beitrag von Werner.
Mit Pablos Bibliothek kannst du ganz einfach Strukturen definieren und auch die DLL Funktion importieren.

Rück doch mal die genaue C Beschreibung raus ;-)
Gruß
Hubert
Chris
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 49
Registriert: Fr, 17. Feb 2006 8:51
Wohnort: München
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Elster aktuell

Beitrag von Chris »

Das ist richtig das es sich hier um den Parameter handelt, hatte ich ja auch so geschrieben, brauche den für verschiedene Funktionen.

Das ist unter anderem die Funktion welche ich aufrufe, hier sollte das ElsterXML als String zurückkommen. Wenn ich im DLLCall meine Variable als String belege, dann erhalten ich einen leeren String zurück und wenn ich vorher die Variable mit 0 belege, dann scheinbar eine Speicheradresse, würde ich mal tippen.

Code: Alles auswählen

int EricCreateTH 	( 	const char *  	xml,
		const char *  	verfahren,
		const char *  	datenart,
		const char *  	vorgang,
		const char *  	testmerker,
		const char *  	herstellerid,
		const char *  	datenLieferant,
		const char *  	versionClient,
		const char *  	publicKey,
		int *  	messageLen,
		char *  	message,
		char **  	ElsterXML 
	)
Dann werd ich mal bei OT4XB umschauen, vielleicht finde ich hier die entsprechende Funktion zum Auslesen.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Elster aktuell

Beitrag von brandelh »

Hi,

die Funktion sieht ja nicht so komplex aus ... allerdings verwirren mich die ** ganz unten ;-)

Code: Alles auswählen

local cXml := "" // oder der vorhergehende Inhalt ???
local cVerfahren := "keine Ahnung ..."
local cDatenart  := "siehe Anleitung"
local cVorgang  := "..."
local cTestmerker := "..."
local cHerstellerid := "bekannt"
local cDatenLieferant := "..."
local cVersionClient := "Versionsnummer als String"
local cPublicKey := "PublicKey von wem auch immer"
local nMessageLen := 0 // per Referenz, also vermutlich die Länge der Rückgabe
local cMessage := space(2000) // Platz für die Rückmeldung - kann das mehr sein ?
local cElsterXML := space(2000) // Platz für die Rückmeldung - kann das mehr sein ?

nReturn := DllCall( "Elster.dll", DLL_STDCALL oder DLL_CDECL, "EricCreateTH", ;
             cXml, cVerfahren, cDatenart, cVorgang, cTestmerker, cHerstellerid, cDatenLieferant, cVersionClient, cPublicKey,; // alle read only
             @nMessageLen, @cMessage, @cElsterXML )   // ob das letzte stimmt ?

cMessage := left(cMessage,nMessageLen)
cElsterXML sollte eigentlich dann den String enthalten ...

PS: ansonsten würde ich Pablo fragen, für den ist es ein Klacks wenn er die Doku und C-Beispiele hat.
Gruß
Hubert
Chris
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 49
Registriert: Fr, 17. Feb 2006 8:51
Wohnort: München
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Elster aktuell

Beitrag von Chris »

Die Übergaben an die Funktion waren nicht das Problem. Der letzte Parameter kommt als Zeiger zurück. Da bin ich gerade dran zu schauen wie ich den auföse.
Danke aber trotzdem für die Kommentare.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Elster aktuell

Beitrag von brandelh »

Die Übergaben an die Funktion waren nicht das Problem.
Das kam aber so nicht an ;-)
er letzte Parameter kommt als Zeiger zurück. Da bin ich gerade dran zu schauen wie ich den auföse.
Darum hatte ich ja auf den Thread mit Werner verwiesen (den mit dem String-Rückgabewert):
:arrow: http://www.xbaseforum.de/viewtopic.php?f=27&t=6690
dort steht, dass er einen Pointer auf einen String zurückgeliefert bekommt und diesen so als String zurückgibt:

Code: Alles auswählen

local nPointer := dllcall("C-lib.dll", DLL_CDECL, "libFunctionsName", nParameter1)
return Peekstr(nPointer, 0, -1) // OT4XB Funktion !
Du müsstest nur nPointer durch deinen letzten Parameter ersetzen und solltest einen String mit dem ElsterXML zurück erhalten.
Gruß
Hubert
Chris
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 49
Registriert: Fr, 17. Feb 2006 8:51
Wohnort: München
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Elster aktuell

Beitrag von Chris »

Hallo,

nur zur Vollständigkeit. Ich habe das ganze nun umsetzen können.
Habe die Funktionalitäten von BAP genutzt um die Typdefinitionen sowie die abzubilden.
Den Zeiger habe ich über die Funktion StringOf() auflösen können und bin somit auch an die korrekte Rückgabe gekommen.

Gruß,
Christian
Antworten