Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Problem mit byte-Array und Methode aus dll
Viper2000
myCSharp.de - Member



Dabei seit:
Beiträge: 63

Themenstarter:

Problem mit byte-Array und Methode aus dll

beantworten | zitieren | melden

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:
Zitat
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
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Viper2000 am .
private Nachricht | Beiträge des Benutzers
Michbeck1983
myCSharp.de - Member

Avatar #avatar-2965.gif


Dabei seit:
Beiträge: 239
Herkunft: Augsburg

beantworten | zitieren | melden

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]
private Nachricht | Beiträge des Benutzers
Viper2000
myCSharp.de - Member



Dabei seit:
Beiträge: 63

Themenstarter:

beantworten | zitieren | melden

das habe ich mir auch zuerst so gedacht, allerdings steht dem folgende Fehlermeldung im Wege:
Zitat
Fehler 3 6-Argument: kann nicht von "ref byte[]" in "ref object" konvertiert werden.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Viper2000,

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

herbivore
private Nachricht | Beiträge des Benutzers
Viper2000
myCSharp.de - Member



Dabei seit:
Beiträge: 63

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Viper2000
myCSharp.de - Member



Dabei seit:
Beiträge: 63

Themenstarter:

beantworten | zitieren | melden

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

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

//buffer füllen

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

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Viper2000 am .
private Nachricht | Beiträge des Benutzers