Entwickler-Ecke

Basistechnologien - Pointer in C#


HoPPeL - Fr 18.03.11 15:29
Titel: Pointer in C#
hi,

ich bins schon wieder :oops: ...

für mein progrämmchen benötige ich zwingend folgende methode einer klasse:

C#-Quelltext
1:
void vtkImageImport::SetImportVoidPointer (void * ptr)                    


es wird also ein Pointer auf mein Array, welches meine Punkte enthält benötigt
also habe ich mich ein wenig umgeschaut, wie ich das nun in c# gelöst bekomme und folgendes ist bis jetzt dabei rausgekommen


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
int[] buffer = {2550};
            vtkImageImport test = new vtkImageImport();
            unsafe
            {
                fixed (void* pData = buffer); //Fehler Möglicherweise falsche leere Anweisung

                {
                    test.SetImportVoidPointer((IntPtr)pData); //FehlerDer Name "pData" ist im aktuellen Kontext nicht vorhanden.
                }
            }


wo könnte das Problem liegen, gibt es eine bessere/saubere Vorgehensweise ? mfg


Kha - Fr 18.03.11 15:39

Das Semikolon hinter fixed ;) ...
Denke aber daran, dass der Pointer dann auch nur innerhalb des fixed-Blocks gültig ist.


Christian S. - Fr 18.03.11 15:42

Hallo!

Ohne es gerade teste zu können:



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
vtkImageImport test = new vtkImageImport();

int[] buffer = {255,0};
var pin = GCHandle.Alloc(buffer, GCHandleType.Pinned);

try {
  test.SetImportVoidPointer(pin.AddrOfPinnedObject());             
finally {
  pin.Free();
}


Grüße,
Christian


HoPPeL - Fr 18.03.11 15:48

ohhh man da guck ich da ne ewigkeit drauf und raffs nicht, dass da ein Semikolon steht ... :/
danke Christian, werds gleich mal so test, wie du es beschrieben hast :)

mfg