Laden...

Problem mit byte-Array und Methode aus dll

Erstellt von Viper2000 vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.068 Views
V
Viper2000 Themenstarter:in
63 Beiträge seit 2008
vor 14 Jahren
Problem mit byte-Array und Methode aus dll

Hallo,

ich nutze folgende Methode aus einer DLL:

public virtual void blablabla(AccessFlags iAccessFlags, short iMemArea, int iAddress, int iNumMau, short iBytesPerMau, ref object vDataBuffer, ref object vAccessBuffer);

Die Methode erwartet also als vDataBuffer ein "object" auf Byte-Basis als Referenz.
Ich habe mir also folgendes angelegt:

object buffer = new byte[SizeMau];

diesen Buffer dann als Referenz an die Methode übergeben und laufen gelassen. Ich habe anschließend auch das richtige in dem Puffer stehen (sehe ich im Debugger von Visual Studio).

Allerdings kann ich nicht indiziert auf den Puffer zugreifen -> Fehlermeldung:

Fehler 3 Indizierung mit [] kann nicht auf einen Ausdruck vom Typ "object" angewendet werden.

Wie bekomme ich die Daten aus dem Puffer zur weiteren Verarbeitung?

Viper

239 Beiträge seit 2008
vor 14 Jahren

Hallo Viper2000,

die Fehlermeldung sagt doch im Prinzip schon alles. Das Problem ist, dass du Boxing verwendest. Du kannst der DLL-Methode auch direkt ein Byte-Array übergeben, da jeder Datentyp/jede Klasse implizit von object abgeleitet ist.

Also quasi:


byte[] buffer = new byte[SizeMau];

Gruß Michbeck1983

Neulich im Computerkurs:
Mein Computer kennt Else nicht! 😁


[URL]XING-Profil[/URL]

V
Viper2000 Themenstarter:in
63 Beiträge seit 2008
vor 14 Jahren

das habe ich mir auch zuerst so gedacht, allerdings steht dem folgende Fehlermeldung im Wege:

Fehler 3 6-Argument: kann nicht von "ref byte[]" in "ref object" konvertiert werden.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Viper2000,

es liegt an dir beim DllImport (darum geht es doch, oder?) die richtigen Parametertypen anzugeben.

herbivore

V
Viper2000 Themenstarter:in
63 Beiträge seit 2008
vor 14 Jahren

Also die DLL ist zum Steuern einer anderen Software per TCP übers Netzwerk.
Die DLL wird vom Hersteller der anderen Software zur Verfügung gestellt.
Ich habe die DLL einfach in Visual Studio.NET 2008 als Verweis hinzugefügt und konnte diese dann auch so benutzen.

Nur bei der Sache mit dem Puffer bin ich bisher gescheitert 🤔

V
Viper2000 Themenstarter:in
63 Beiträge seit 2008
vor 14 Jahren

Die Lösung war ganz einfach, fast schon peinlich 😄:

object buffer = new byte[Size];
byte[] buffer2 = new byte[Size];

//buffer füllen

buffer2 = (byte[])buffer;  //stinknormaler Cast

🙂