PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++/CLI Array Problem


Gast
2010-02-23, 23:20:56
Hi,

Also ich hab in C++/CLI ein array<unsigned char>^ und möchte das in ein unsigned char* umwandeln.
Und zwar so schnell wie möglich.
Hab das jetzt erstmal so gemacht das ich das einfach manuell rüberkopiere, aber das ist ja sehr suboptimal, schon alleine weil das dann ja extra kopiert werden muss. Viel besser wäre es ja wenn es irgend eine möglichkeit gäbe das einfach so umzuwandeln, dass der selbe Speicher benutzt wird.

MfG

del_4901
2010-02-23, 23:30:03
Das geht glaube ich nicht, da der managed Heap entsprechend geschuetzt wird. (Ist ja auch logisch, sonst macht das ganze keinen Sinn mehr)

Coda
2010-02-23, 23:39:10
Sowas in der Art:
byte[] arr = new byte[512];
fixed (byte* arr_ptr = arr) {
// use arr_ptr here...
}

Das geht aber nur in einem einem unsafe-Block. Das fixed sorgt dafür, dass der GC arr nicht verschiebt während man mit Pointern drauf zugreift.

Gast
2010-02-26, 01:12:43
Auf Coda ist wie immer verlass :)

Unter C# funktioniert deine Lösung wunderbar.

Leider kann ich nicht rausfinden wie man sowas unter C++ macht.
Erstens scheint es da kein fixed zu geben.
Außerdem ist das was in C# ein byte[] ist in C++&CLI dann ja ein array<unsigned char>^.
Und ich find nicht raus wie man das konvertieren kann in ein unsigend char* Typen.

Jemand Ideen?

Gast
2010-02-26, 01:19:23
Achja und direkt noch eine Frage:

Wenn ich in C# ein byte* habe, wie konvertiere ich das am einfachsten in ein byte[] ohne umkopieren zu müssen?

Coda
2010-02-26, 01:36:50
Oh ich dachte das sei C++.

Für C++ ist das Keyword wohl pin_ptr (http://msdn.microsoft.com/en-us/library/1dz8byfh.aspx). Da ist auch genau das Beispiel dabei was du suchst.

Gast
2010-02-26, 01:49:43
THX!!!
Auf dich ist immer Verlass.