Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   .NET-Framework (managed code) (https://www.delphipraxis.net/79-net-framework-managed-code/)
-   -   Delphi .Net: Datenaustausch über Widestrings (https://www.delphipraxis.net/161557-net-datenaustausch-ueber-widestrings.html)

FredlFesl 8. Jul 2011 18:14

.Net: Datenaustausch über Widestrings
 
Hi

Ich habe hier eine Delphi-Anwendung, die Daten aus einem COM-Objekt erhält. Das COM-Objekt ist in Delphi geschrieben und verwendet WideStrings, auch im Interface (BSTR)

Ein dot.NET Programm greift ebenfalls auf das COM-Objekt zu und liest und schreibt Strings. So, klappt.

Nun sollen auch Binärdaten, also Bitmaps, PDFs usw. über diese Schnittstelle gelesen und geschrieben werden.

Ich habe es derzeit mit einem Base64-kodierten String gelöst, was auch funktioniert, aber -glaube ich- nicht direkt speicherplatzsparend ist, denn Base64 = 8-bit, aber WideString = 16 bit pro Zeichen.

Da muss sich doch was machen lassen...

Gibt es eine 'best practice' für sowas?
Sollte das COM-Objekt erweitert werden, um speziell Binärinformationen zu lesen und zu speichern? Wenn ja, wie?

Luckie 8. Jul 2011 19:53

AW: .Net: Datenaustausch über Widestrings
 
Schick die Daten doch roh rüber. Und sag dem Empfänger vorher um was es sich handelt. Dann empfängst du die Daten, schreibst sie einen Fielstream (wenn sie gespeichert werden sollen) und hängst dann je nach Typ die passende Dateiendung dran. Oder mache ich einen Denkfehler und stelle mir das zu einfach vor?

rollstuhlfahrer 8. Jul 2011 19:56

AW: .Net: Datenaustausch über Widestrings
 
Du könntest einen Pointer (-> Delphi-Referenz durchsuchenTMemoryStream/Delphi-Referenz durchsuchenGetMem) nehmen und da die Daten reinschreiben und dein Client ließt die dann wieder aus.

Bernhard

FredlFesl 8. Jul 2011 21:46

AW: .Net: Datenaustausch über Widestrings
 
Oh, da hab ich mich blöd ausgedrückt.

Beim COM-Objekt handelt es sich um eine Art Datenbank, aber nur um 'eine Art'. So eine Mischung aus Registry und DB. Nur mit WideStrings. Und nun soll das Konzept erweitert werden. Wie gesagt, mit Base64 klappt es ja.

Auf C#-Seite: Bitmap=>Stream=>Byte-Array=>Base64-String=>Widestring
Auf Delphi-Seite WideString=>Base64-String=>StringStream=>Bitmap

Bisserl viel Redundanz und Konvertierungsgehoppel.


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