Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   c DLL char++ übersetzen (https://www.delphipraxis.net/201991-c-dll-char-uebersetzen.html)

DeddyH 17. Sep 2019 13:00

AW: c DLL char++ übersetzen
 
Wie gesagt, bei mir sieht das ähnlich aus. Es gibt doch bestimmt eine ähnliche Funktion für ProcessData, was kommt denn da heraus (ich muss da allerdings explizit alle #0 herausfiltern)?

samso 17. Sep 2019 13:09

AW: c DLL char++ übersetzen
 
Wir sind uns einig, dass das komisch aussieht. Vielleicht doch UTF-16?
Delphi-Quellcode:
function readLogMessage(var logMessage: pChar;
                        var logMessageLength:Integer):integer;stdcall;external 'fremdedll.dll';
Delphi-Quellcode:
var
 msg: pChar;
 ergebnis: integer;
 msgLength: integer;
 str : String;
begin
  ergebnis := readLogMessage(msg, msgLength);
  memo1.lines.add(inttostr(msgLength));
  SetString(str, msg, msgLength);
  ShowMessage(str);
end;

mfoerste 17. Sep 2019 13:11

AW: c DLL char++ übersetzen
 
Da habe ich mich ehrlich gesagt noch nicht herangetraut. Ich wollte mit einer einfachen Funktion anfangen, um erst einmal das char** umgesetzt zu bekommen.

Es beruhigt mich ein wenig, dass ich nicht alleine diese Ergebnisse habe.

Gibt noch die function exportSerialNumbers

Code:
short int exportSerialNumbers(unsigned char **serialNumbers,
                              unsigned long int *serialNumbersLength);
serialNumbers out REQUIRED The serial number(s) of the SE API. The serial number(s) SHALL be encoded in the TLV structure defined in BSI TR-03151.
serialNumbersLength out REQUIRED Length of the array that represents the serial number(s).

Vielleicht sollte ich es hiermit mal probieren.

mfoerste 17. Sep 2019 13:17

AW: c DLL char++ übersetzen
 
Mit UTF-16 wird's chinesisch, wobei einige Teile wiederum gut aussehen:

Name Wert
str '舰ⴁĂ'#$0602'Љ缀܀܃āႀ瑓牡呴慲獮捡楴湯ᒁasigntse_d如Beleg^75.33_ 7.99_0.00_0.00_0.00^10.00:Bar_5.茰䬎愀猀猀攀渀戀蔀  賎ⰶ偱돲夙媽䡄 濢訓乂譨뱭鳖岙ਰ'#$0806'蘪칈нȃĂᜡㄍ〹ㄹㄴ㌴〷娳䜄䔰ℂ輀䇸餤腉팩㢖騝짡꾔䕯䕙폛⌹孂谯 Ɏ⨠Ꝿ玃ԣ'#$D828'屰ꊬ盭ᑏ䂥瓉짚䛄䷋彈꡵'#$ABAC#$ABAB#$ABAB#$ABAB' ﺫﻮﻮﻮ'#0#0#0#0'厁ᖟ'#0'膰'#$0092#$9FD8#$0092'ﻮﻮﻮﻮﻮﻮﻮﻮ ﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮ ﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮ ﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮ'

Vielen Dank für Eure Hilfe. Ich versuche es jetzt erstmal mit der anderen function. Mal schauen, was da raus kommt.

samso 17. Sep 2019 13:33

AW: c DLL char++ übersetzen
 
Schön, jetzt ist mir auch klar, weshalb die Kollegen sich gleich erkannt haben. Der Link auf die Headerdatei hätte ja vielleicht auch gleich in #1 stehen können. Könnte es sein, dass die Logmessage vielleicht kein Zeiger auf einen String ist, sondern eher ein Zeiger auf die "Common Log Message Structure"?

mfoerste 17. Sep 2019 13:46

AW: c DLL char++ übersetzen
 
Sorry, das habe ich nicht gewusst. In der Beschreibung stand davon kein Wort.

Zeitgleich mit diesem Thread habe ich eine Anfrage beim Hersteller gestartet.
Und fast zeitgleich erhalte ich folgende Antwort vom Hersteller:

Es handelt sich bei der LogMessage um eine ASN.1 Datenstruktur. Diese ist vom BSI (https://www.bsi.bund.de/SharedDocs/D...cationFile&v=4) Kapitel 2.1 vorgegeben.

Da wartet eine Menge Arbeit auf mich.

Vielen Dank nochmals für die tolle Unterstützung. Dieses Forum ist einfach der Hammer.:thumb:

DeddyH 17. Sep 2019 16:42

AW: c DLL char++ übersetzen
 
Wenn ich mich recht entsinne werden die LogMessages doch lediglich beim Export benötigt. Da könnte man ja auch einfach hergehen und aus PAnsiChar PByte machen, somit die Rohdaten ohne Interpretation abgreifen und in einer Datei speichern (mittels eines TStreams z.B.), und fertig ist die Laube.

Dalai 17. Sep 2019 17:18

AW: c DLL char++ übersetzen
 
Nur so zur Info: unsigned long int sollte man in Delphi nicht zu einem integer machen, sondern entweder zu einem DWORD oder Cardinal. Integer ist zwar 32 bit lang, aber mit Vorzeichen, unsigned ist aber vorzeichenlos.

Grüße
Dalai

mfoerste 18. Sep 2019 06:12

AW: c DLL char++ übersetzen
 
Zitat:

Zitat von DeddyH (Beitrag 1446679)
Wenn ich mich recht entsinne werden die LogMessages doch lediglich beim Export benötigt. Da könnte man ja auch einfach hergehen und aus PAnsiChar PByte machen, somit die Rohdaten ohne Interpretation abgreifen und in einer Datei speichern (mittels eines TStreams z.B.), und fertig ist die Laube.

Das wäre cool. Dieser TSE Kram ist echt zum :pale:

samso 18. Sep 2019 06:37

AW: c DLL char++ übersetzen
 
Ich fasse mal zusammen:

Delphi-Quellcode:
function readLogMessage(var logMessage: pByte;
                        var logMessageLength: Cardinal):Integer; stdcall; external 'fremdedll.dll';
Delphi-Quellcode:
function WriteLogToStream(Stream: TStream): Integer;
var
 msg: pByte;
 msgLength: Cardinal;
begin
  Result := readLogMessage(msg, msgLength);
  if Result = EXECUTION_OK then
    Stream.WriteBuffer(msg^, msgLength); // und hier wird dann msgLength wieder zu einem Integer. D.h. Überlauf bei 2GB ;-)
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:15 Uhr.
Seite 2 von 3     12 3      

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