AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

c DLL char++ übersetzen

Ein Thema von mfoerste · begonnen am 17. Sep 2019 · letzter Beitrag vom 18. Okt 2019
Antwort Antwort
samso

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

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
 
#2

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.655 Beiträge
 
Delphi 12 Athens
 
#3

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
mfoerste

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

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
 
#5

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
mfoerste

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

AW: c DLL char++ übersetzen

  Alt 18. Sep 2019, 10:43
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;
WOW, vielen Dank!
  Mit Zitat antworten Zitat
hhcm

Registriert seit: 12. Feb 2006
Ort: Wegberg
310 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: c DLL char++ übersetzen

  Alt 15. Okt 2019, 15:12
Hallo,

ich wollte jetzt nicht den x ten Thread zur TSE Programmierung eröffnen und der Code der hier geschrieben wurde sieht schwer nach A-Trust aus
Bei mir sieht die ganze Sache komplett anders aus.

Delphi-Quellcode:
function TSE_readLogMessage(var logMessage: TBytes; var logMessageLength: LongWord): ShortInt; stdcall; external 'fremdedll.dllname 'readLogMessage';

procedure SaveBytesToFile(const Data: TBytes; const Len: LongWord; const Filename: String);
var
  Stream: TFileStream;
begin
  Stream := TFileStream.Create(Filename, fmCreate);
  try
    if Data <> nil then
      Stream.WriteBuffer(Data[0], Len);
  finally
    Stream.Free;
  end;
end;

procedure ReadLogMessage(BinFilename: String);
var
  res: ShortInt;
  log: TBytes;
  len: LongWord;
begin
  log := nil;
  len := 0;

  res := TSE_readLogMessage(&log, &len);
  setLength(log, len);
  SaveBytesToFile(log, len, BinFilename);
end;
Ich bekomme da genau so einen Quark raus, wie bei dem JAVA Beispiel.
Das einzige was richtig funktioniert sind die ganzen ExportDataFilteredByxxxxx funktionen. Start und FinishTransaction war auch nicht so kritisch. Wo ich komplett auf dem Schlauch stehe sind die Rückgabewerte. Nirgens ist definiert was z.B ERROR_START_TRANSACTION_FAILED für einen Wert hat.
Es gibt ein C Beispiel mit header dateien, in diesen stehen negative Rückgabewerte für die Konstanten z.B -5001. Ich bekomme als Rückgabe entweder eine 0 oder z.B 116. Hat da jemand eine Idee?
Chris
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#8

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
Antwort Antwort


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 09:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz