Delphi-PRAXiS
Seite 3 von 3     123   

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)

mfoerste 18. Sep 2019 09:43

AW: c DLL char++ übersetzen
 
Zitat:

Zitat von samso (Beitrag 1446783)
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:shock:, vielen Dank!:-D

hhcm 15. Okt 2019 14:12

AW: c DLL char++ übersetzen
 
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.dll' name '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?

TiGü 15. Okt 2019 15:43

AW: c DLL char++ übersetzen
 
Zitat:

Zitat von hhcm (Beitrag 1449678)
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.dll' name 'readLogMessage';

...

procedure ReadLogMessage(BinFilename: String);
var
  res: ShortInt;
...
  res := TSE_readLogMessage(&log, &len);
...
end;
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?

Gehe noch mal in dich und prüfe, ob -5001 in den Wertebereich von
Delphi-Quellcode:
ShortInt
passen.
Dann überlege, ob der Typ des Rückgabewertes von TSE_readLogMessage passt.
Nur weil die Namen ähnlich sind
Delphi-Quellcode:
short int
und
Delphi-Quellcode:
ShortInt
muss es nicht zwangsläufig das selbe sein.

https://de.wikipedia.org/wiki/Datentypen_in_C
http://docwiki.embarcadero.com/RADSt...e_Integertypen

hhcm 15. Okt 2019 17:22

AW: c DLL char++ übersetzen
 
Zitat:

Nur weil die Namen ähnlich sind short int und ShortInt muss es nicht zwangsläufig das selbe sein.
:roll: Wie doof. Im Trott einfach übernommen. SmallInt wäre wohl richtiger. Dann passts auch. Danke!!!

---

Auch wenn sich "nenn wir es mal Konkurrenten" nicht immer verstehen, hat jemand lust auf einen Gedankenaustausch?
Wir haben bisher die Österreichische-RKSV über A-Trust abgewickelt, daher setzen wir auch jetzt wieder darauf, auch wenn es holprig war.
Die Entwicklerdoku bei A-Trust ist fehlerbehaftet aber ziemlich komplett.

Ich bin allerdings auch nicht festgefahren.

mfoerste 18. Okt 2019 12:12

AW: c DLL char++ übersetzen
 
Zitat:

Zitat von hhcm (Beitrag 1449678)
Hallo,

Ich bekomme da genau so einen Quark raus, wie bei dem JAVA Beispiel.

upps, falscher thread


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr.
Seite 3 von 3     123   

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