Mam dwie wartości IntPtr
wskazujące na niektóre obszary danych o length
bajtów. length
może mieć rząd wielkości od 200k do 400k.Kopiowanie danych z IntPtr do IntPtr
int length = /* ..*/
IntPtr ptrSrc = /*.. */;
IntPtr ptrDst = /* .. */;
Teraz chcę skopiować dane z ptrSrc
do ptrDst
. Ten kod działa poprawnie:
byte[] data = new byte[length];
Marshal.Copy(ptrSrc, data, 0, length);
Marshal.Copy(data, 0, ptrDst, length);
, ale ma tę wadę, że wymaga dodatkowej tymczasowej (potencjalnie ogromnej) tablicy. Niestety, nie mogłem znaleźć wariantu Marshal.Copy
w środowisku .NET do kopiowania bezpośrednio z IntPtr
do IntPtr
, więc szukam alternatyw.
Jestem zainteresowany rozwiązaniem, które działa na 32 Windowsach oraz 64-bitowym systemie Windows. Jakieś sugestie?
Czy można użyć 'unsafe'? – driis
@driis: tak, to jest możliwe. –