Код: Выделить всё
Write(IntPtr handleFile, void* bufferData, uint length){
void* buffer = bufferData
while (length > 0)
{
uint wrtn;
if (!WriteFile(handle, buffer, len, out wrtn, IntPtr.Zero))
{
// Do some error handling
}
// This does not compile, because of the cast but also simply because void* does not have += operators (it is unknown size).
buffer += (void*)wrtn;
len -= wrtn;
}
На самом деле проблема в последних двух строках... Во-первых, компилятор жалуется что вы не можете привести uint к void*. Кроме того, просто невозможно использовать += или даже + для void*, поскольку его размер неизвестен.
Код: Выделить всё
Write(IntPtr handleFile, void* bufferData, uint length){
byte* buffer = (byte*)bufferData
while (length > 0)
{
uint wrtn;
if (!WriteFile(handle, (void*)buffer, len, out wrtn, IntPtr.Zero))
{
// Do some error handling
}
// This works! I can add to a byte*
buffer = buffer + wrtn; // I could also have used buffer += wrtn
len -= wrtn;
}
}
Код: Выделить всё
buffer += (byte*)wrtn;
- Почему он генерирует такое приведение (и почему не принято делать это в коде, написанном пользователем)?
- Что случилось с операторами += на void* в первом примере? Какой исходный код сгенерировал buffer += (void*)wrtn, где buffer также void* ????
Подробнее здесь: https://stackoverflow.com/questions/166 ... p-compiler