AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

c DLL char++ übersetzen

Ein Thema von mfoerste · begonnen am 17. Sep 2019 · letzter Beitrag vom 18. Okt 2019
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: c DLL char++ übersetzen

  Alt 17. Sep 2019, 14:00
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)?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#12

AW: c DLL char++ übersetzen

  Alt 17. Sep 2019, 14:09
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;
  Mit Zitat antworten Zitat
mfoerste

Registriert seit: 26. Sep 2005
10 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: c DLL char++ übersetzen

  Alt 17. Sep 2019, 14:11
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.
  Mit Zitat antworten Zitat
mfoerste

Registriert seit: 26. Sep 2005
10 Beiträge
 
Delphi 10.3 Rio
 
#14

AW: c DLL char++ übersetzen

  Alt 17. Sep 2019, 14:17
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.
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#15

AW: c DLL char++ übersetzen

  Alt 17. Sep 2019, 14:33
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"?
  Mit Zitat antworten Zitat
mfoerste

Registriert seit: 26. Sep 2005
10 Beiträge
 
Delphi 10.3 Rio
 
#16

AW: c DLL char++ übersetzen

  Alt 17. Sep 2019, 14:46
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: c DLL char++ übersetzen

  Alt 17. Sep 2019, 17:42
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.679 Beiträge
 
Delphi 5 Professional
 
#18

AW: c DLL char++ übersetzen

  Alt 17. Sep 2019, 18:18
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
  Mit Zitat antworten Zitat
mfoerste

Registriert seit: 26. Sep 2005
10 Beiträge
 
Delphi 10.3 Rio
 
#19

AW: c DLL char++ übersetzen

  Alt 18. Sep 2019, 07:12
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
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#20

AW: c DLL char++ übersetzen

  Alt 18. Sep 2019, 07:37
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;
  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 05:53 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