AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein C# Byte Array: Wie nach Delphi übersetzen?
Thema durchsuchen
Ansicht
Themen-Optionen

C# Byte Array: Wie nach Delphi übersetzen?

Ein Thema von BlueStarHH · begonnen am 5. Feb 2021 · letzter Beitrag vom 5. Feb 2021
Antwort Antwort
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#1

C# Byte Array: Wie nach Delphi übersetzen?

  Alt 5. Feb 2021, 08:20
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!
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

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

  Alt 5. Feb 2021, 09:44
Ist das überhaupt eine DLL die du mit z.B. C++ oder Delphi benutzen kannst oder ist die für .NET?
  Mit Zitat antworten Zitat
TiGü

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

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

  Alt 5. Feb 2021, 09:45
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.
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 5. Feb 2021, 12:17
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...
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 5. Feb 2021, 12:23
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.
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#6

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

  Alt 5. Feb 2021, 13:16
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;
  Mit Zitat antworten Zitat
TiGü

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

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

  Alt 5. Feb 2021, 14:01
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.
  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 11:25 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