Laden...

Problem mit byte-Array und Methode aus dll

Letzter Beitrag vor 15 Jahren 6 Posts 1.101 Views
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

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]

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.

Hallo Viper2000,

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

herbivore

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 🤔

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

🙂