2Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
568
568
EMPFEHLEN
-
Hallo zusammen,
ich muss in meiner C#- Application verschiedene COM-Schnittstellen verwenden, unter anderem auch eine Methode, die als Argumenten ref byte und ref uint ewartet, also
Code :1
writeToStream(ref byte Stream, ref uint size)
Dabei heißt es in der Doku, dass Stream ein byte array ist, in welches die Daten dann geschrieben werden.
Die Frage ist also, wie bekomme ich ref byte aus einem byte[] ?
Danke für die Hilfe!
-
Kannst du uns auch sagen welche COM-Schnitstellen du verwendest? Dann könnte man sich die Docs auch selbst mal anscheuen.

Ich glaube, dass ich dich nicht ganz verstehe. Du postest eine Methoden-Signatur die als erstes Argument ein Byte by reference entgegen nimmt. Nirgends sehe ich ein Byte-Array. Und wieso willst du ein Byte aus einem Byte-Array bekommen?
Der Aufruf müsste im wesentlichen folgendermaßen aussehen:
Code csharp:1 2 3
byte myByte = 47; uint myUint = 11; writeToStream(ref byte Stream, ref uint size)
Nach dem Aufruf hätten myByte und myUnit einen anderen Wert.Grüße SB
-
Vielen Dank für die Antwort!
byte array muss ich selber in meiner c# application erstellen, um den Speicherplatz zu reservieren. Die Methode kriegt vermutlich ein Verweis auf byte[] und wird den Speicherplatz mit den Daten füllen. Das Problem ist nur, dass die Methode ref byte erwartet und kein byte * oder byte[] !
-
Hallo zosik,
woher stammt denn die Methoden-Signatur "writeToStream(ref byte Stream, ref uint size)"? Dass du damit den gewünschten Zweck nicht erreichen kannst ist offensichtlich. Falls das von einem DllImport ...] stammt, muss dort die Signatur korrigiert werden.
Gruß
MCoder"The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
--- Larry Wall
-
Hallo MCoder,
diese Methode stammt aus einer COM-Schnittstelle, die mir zur Verfügung gestellt wurde. Ich kann nichts an dieser Schnittstelle ändern. C++ - Methode, die hinter dieser Schnittstelle steht, hat folgende Signatur (idl) :
Code :1 2
HRESULT WriteToStream([in] byte *Stream, [in,out] UINT* pSize);
-
Hmm, ausgehend von der C++ - Methode müsste die C# - Methode eigentlich eher so aussehen:
Im Zusammenhang mit C# habe ich noch keine COM-DLLs verwendet und kenne mich da nicht weiter aus. Wie kommt man denn von der C++ - Signatur zur C# - Signatur ?Code csharp:1
writeToStream(byte [] stream, ref uint size)
Gruß
MCoder"The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
--- Larry Wall
-
22.09.10 12:15 #7
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.Der Code war nicht direkt C++ sondern IDL.
Daraus erzeugt der MIDL Compiler eine Type Library (tlb).
Aus der TLB erzeugt tlbimp dann eine .NET Assembly DLL.
Das Problem ist, das der MIDL Compiler die Information, dass es sich um ein Array bei dem Parameter handelt nicht in die TLB übersetzen kann.
Man muss tatsächlich die DLL neu erzeugen indem man den Code disassembliert, die Signatur ändert und letztlich wieder zusammenbaut.
Siehe http://msdn.microsoft.com/en-us/libr...agemsilanchor1
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Müsste es nicht reichen per Marshal (statische Methode fehlt mir grad nicht ein, irgendwas mit Alloc
) den Speicherplatz des Array zu allozieren und ein IntPtr zu übergeben?
Und dieses dann halt später wieder auslesen.
-
23.09.10 07:48 #9
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Ich war noch beim DLLImport, aber wenn ich das richtig sehe redet ihr hier über die interop dll.
Ähnliche Themen
-
byte Array in Datei speichern und wieder in byte Array einlesen
Von riseX im Forum JavaAntworten: 5Letzter Beitrag: 22.02.10, 12:05 -
Byte?
Von h4xter im Forum Borland CBuilder und VCLAntworten: 2Letzter Beitrag: 19.07.09, 13:13 -
int in byte[]zerlegen?
Von pantarhei im Forum Algorithmen & Datenstrukturen mit JavaAntworten: 2Letzter Beitrag: 29.06.09, 07:28 -
Byte[] zu Image
Von Andy0709 im Forum .NET WPF & SilverlightAntworten: 14Letzter Beitrag: 05.05.08, 17:51 -
Hex to Byte
Von Freak2k im Forum .NET CaféAntworten: 1Letzter Beitrag: 14.10.05, 08:41





Zitieren

Login





