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
Seite 3 von 3     123   
mfoerste

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

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

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
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#23

AW: c DLL char++ übersetzen

  Alt 15. Okt 2019, 16:43
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 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 ShortInt passen.
Dann überlege, ob der Typ des Rückgabewertes von TSE_readLogMessage passt.
Nur weil die Namen ähnlich sind short int und ShortInt muss es nicht zwangsläufig das selbe sein.

https://de.wikipedia.org/wiki/Datentypen_in_C
http://docwiki.embarcadero.com/RADSt...e_Integertypen
  Mit Zitat antworten Zitat
hhcm

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

AW: c DLL char++ übersetzen

  Alt 15. Okt 2019, 18:22
Zitat:
Nur weil die Namen ähnlich sind short int und ShortInt muss es nicht zwangsläufig das selbe sein.
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.
Chris
  Mit Zitat antworten Zitat
mfoerste

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

AW: c DLL char++ übersetzen

  Alt 18. Okt 2019, 13:12
Hallo,

Ich bekomme da genau so einen Quark raus, wie bei dem JAVA Beispiel.
upps, falscher thread
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 19:26 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