So wird IntPtr in Byte * umgewandelt

7

Ich rufe eine Methode über Interop auf, die einen out IntPtr -Parameter zurückgibt. Wie kann ich ein byte* für dieses IntPtr bekommen, damit ich es bearbeiten kann? Ich habe folgendes versucht:

%Vor%

aber es hat nicht funktioniert. Jede Hilfe wäre willkommen!

    
Dmitri Nesteruk 03.04.2009, 10:05
quelle

5 Antworten

13

Sie können einfach schreiben:

%Vor%

Sie müssen das feste Schlüsselwort nicht verwenden. Du willst den IntPtr nicht pinnen, oder?

    
Jb Evain 03.04.2009, 10:09
quelle
5

myIntPtr.ToPointer()

    
Noldorin 03.04.2009 10:08
quelle
1

Wenn Sie in Ihrer Anwendung keinen unsicheren Code verwenden möchten, müssen Sie die Methoden in System.Runtime.InteropServices.Marshal verwenden oder (noch besser) die Parametertypen Ihrer Interop-Funktionen deklarieren, damit das Marshalling automatisch erfolgt.

    
Anton Tykhyy 03.04.2009 10:11
quelle
1

Ich wollte in meiner Anwendung keinen "unsicheren Code", also habe ich folgendes getan, um ein IntPtr in ein Byte [] zu konvertieren. Gegeben ein IntPtr namens "unsafeDataBlock":

%Vor%     
Dimitri C. 20.08.2009 07:40
quelle
1

Dies schien bei mir zu funktionieren, ich habe nicht Interop benutzt, aber ich rief immer noch eine verwaltete C ++ Funktion von C Sharp an. Die verwaltete C ++ - Funktion hat jedoch nicht verwalteten Code aufgerufen, so dass sie das Gleiche wie Interop erreicht hat.

Wie auch immer, in der C ++ - Funktion, die von c-sharp aufgerufen wurde, habe ich diesen Code verwendet:

(anyPointerType *) Zeiger = (anyPointertyp *) myIntPtr.ToPointer ();

    
JD. 24.11.2009 03:02
quelle

Tags und Links