Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C# Byte Array: Wie nach Delphi übersetzen? (https://www.delphipraxis.net/206875-c-byte-array-wie-nach-delphi-uebersetzen.html)

BlueStarHH 5. Feb 2021 07:20

C# Byte Array: Wie nach Delphi übersetzen?
 
Moin,

ich nutze eine DLL. Die Doku für die DLL hat leider nur C#-Beispiele. Wie kann ich diesen Code nach Delphi portieren?

Code:
byte[] btSignature = (byte[])axSTPadCapt1.SignatureSaveAsStreamEx(...);

if (btSignature == null) { /*error*/ return; } 

MemoryStream memoryStream = new MemoryStream(btSignature);
Image image = Image.FromStream(memoryStream);
Mir ist insbesondere nicht klar, wie Delphi die Größe von dem Byte-Array wissen soll? Oder braucht man die nicht? Danke!

Der schöne Günther 5. Feb 2021 08:44

AW: C# Byte Array: Wie nach Delphi übersetzen?
 
Ist das überhaupt eine DLL die du mit z.B. C++ oder Delphi benutzen kannst oder ist die für .NET?

TiGü 5. Feb 2021 08:45

AW: C# Byte Array: Wie nach Delphi übersetzen?
 
Dieser Schnipsel stammt ja von Seite 100 der Dokumentation https://www.signotec.com/downloads/d...ntation_de.pdf

Eine Seite weiter oben steht das unter der Überschrift 8.39.1 STPadCapt.ocx
Hast du das OCX-Control importiert?
Wenn du jetzt nur Fragezeichen in den Augen hast, bitte hier entlang:
https://www.delphipraxis.net/64403-o...einbinden.html

Wenn du kein OCX-Control importieren möchtest, steht auf Seite 102 etwas zur Anwendung der nativen Lösung (C/C++) mit der Funktion STSignatureSaveAsStreamEx aus der STPadLib.dll.
Wenn du dir die Funktionsdefiniton nach Delphi übersetzt hast, kannst du das C++-Beispiel ja fast 1:1 in Delphi umsetzen.
Hier wird der klassische Weg gegangen (allseits bekannt und beliebt von der WinApi):

Erst
Code:
STSignatureSaveAsStreamEx(NULL, &nSize, ...)
aufrufen um in nSize die Größe zu ermitteln, dann mit
Code:
pbtImage = new BYTE[nSize];
ein Array passender Größe erzeugen und mit
Code:
 STSignatureSaveAsStreamEx(pbtImage, &nSize, ...)
füllen.

BlueStarHH 5. Feb 2021 11:17

AW: C# Byte Array: Wie nach Delphi übersetzen?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1482312)
Ist das überhaupt eine DLL die du mit z.B. C++ oder Delphi benutzen kannst oder ist die für .NET?

Kann ich mit Delphi nutzen. Ich nutze auch andere Funktionen...

BlueStarHH 5. Feb 2021 11:23

AW: C# Byte Array: Wie nach Delphi übersetzen?
 
Zitat:

Zitat von TiGü (Beitrag 1482313)
Eine Seite weiter oben steht das unter der Überschrift 8.39.1 STPadCapt.ocx
Hast du das OCX-Control importiert?

Ich nutze die vom Hersteller bereitgestellte STPadCaptLib_TLB.pas Diese müsste die OCX importieren, wenn mich nicht alles täuscht.

In der STPadCaptLib_TLB.pas gibt es nur diese Funktion:

Code:
function SignatureSaveAsStreamEx(nResolution: Smallint; nWidth: Integer; nHeight: Integer;
                                     nFileType: Smallint; nPenWidth: Smallint; penColor: OLE_COLOR;
                                     nOptions: Integer): OleVariant;
Da muss NULL als erster Parameter rein? Und aus nWidth kommt dann die Größe des Arrays zurück? Ich bin gerade etwas verwirrt.

BlueStarHH 5. Feb 2021 12:16

AW: C# Byte Array: Wie nach Delphi übersetzen?
 
Habe es nun hinbekommen:

Code:
var
  Stream: TMemoryStream;
  Buffer: TBytes;
begin
  Buffer := STPadCapt1.SignatureSaveAsStreamEx(300, 0, 0, SIGNO_FILE_PNG, SIGNO_PEN_VAR_WIDTH, 0, 0);

  Stream := TMemoryStream.Create;
  Stream.WriteData(Buffer, Length(Buffer));
  Stream.SaveToFile('D:\test.png');
  Stream.Free;

TiGü 5. Feb 2021 13:01

AW: C# Byte Array: Wie nach Delphi übersetzen?
 
Zitat:

Zitat von BlueStarHH (Beitrag 1482336)
Da muss NULL als erster Parameter rein? Und aus nWidth kommt dann die Größe des Arrays zurück? Ich bin gerade etwas verwirrt.

Ne, meine Ausführung dazu basiert auf der nativen C/C++ mit direkter Nutzung der DLL.
Wenn du das mit der TLB und OCX machst, dann wird das schon intern abgefrühstückt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 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