Помогите пожалуйста. Уже два дня голову ломаю как преобразовать.
Суть программы, как её понимаю я: необходимо прочитать кусок файла, размером 65536 байт.
И отправить в команду memmove языка С. Который делает простую вещь...передвигает байты.
И всё бы хорошо, но я пишу программу в visual c++ 2013 в которой присутствуют чудесные инструменты типа cli. Упрямо возникает ошибка не соответствия типов...вот код:
Это задаются переменные и начинается чтение файла. Чтение файла происходит правильно и хорошо, но чтение происходит в массив, а надо не в массив...смотрим следующий код...там понятно куда надо.
FileStream^ fs;
try
{
fs = File::OpenRead(File);
}
catch (Exception^ ex)
.....
const int BUFFER_SIZE = 65536;
char *szBuffer = new char[BUFFER_SIZE];
unsigned char buf[BUFFER_SIZE];
array<unsigned char>^ b = gcnew array<unsigned char>(BUFFER_SIZE);
UTF8Encoding^ temp = gcnew UTF8Encoding(true);
__int64 iPrevReaded = 0;
__int64 Start = TimerInit();
String^ g;
int cbReaded = 0;
// чтение из файла и вычисление TTH
while ((cbReaded = fs->Read(b, 0, BUFFER_SIZE)) > 0)
{
g=temp->GetString(b);
//cli::pin_ptr<System::Byte> p = g;
tt_update(&ctx, b, cbReaded);
как видно это процедура обрабатывает поступающие из файла данные. И тип - переменная тут byte *buffer.
Текст ошибки:
" 2 IntelliSense: argument of type "cli::array ^" is incompatible with parameter of type "byte *" c:\Users\...\MyForm.cpp 112
"
void tt_update(TT_CONTEXT *ctx, byte *buffer, word32 len)
{
if (ctx->index)
{ /* Try to fill partial block */
unsigned left = BLOCKSIZE - ctx->index;
if (len < left)
{
memmove(ctx->block + ctx->index, buffer, len);
ctx->index += len;
Помогите пожалуйста...сил больше нету гуглить...
Вот что есть...
stackoverflow.com/questions/25600940/managed-c-cli...
но так преобразуется только 1 первый байт...а надо 65535.
Вот проект
https://github.com/master255/SimplyServer