Ошибки компилятора C ++ после замены LPBYTE на unsigned char * в преобразовании Win DLL в Linux SO

Я работаю над преобразованием Windows DLL в Linux SO. Я преобразовал все типы BYTE в unsigned char и LPBYTE в unsigned char *.

Компилятор выдает мне ошибки в одной функции следующим образом:

Ошибка: неверное преобразование из char * в unsigned char

Ошибка: неверное преобразование из «unsigned char» в «unsigned char *»

Конкретно в этих двух строках:

if (DataLineIndexOverlap){
OverlapSize = m_NrofDataLines*m_PosPerSector*m_PosPerSector;
MirrorDataLineIndexOverlap = new unsigned char[OverlapSize];
}

OverlapSize определяется как int, а MirrorDataLineIndexOverlap был LPBYTE в исходном коде Windows и теперь является unsigned char *, а новый unsigned char [OverlapSize] был новым BYTE [OverlapSize] в исходном коде Windows. После этого возникают другие ошибки, и все они связаны с MirrorDataLineIndexOverlap, поэтому я предполагаю, что первичные причины — ошибки первоначального неверного преобразования.

Я ищу самый чистый способ решения этой ошибки компилятора и других подобных, не нарушая остальную часть кода. Есть ли чистая замена LPBYTE в Linux C ++, которая будет компилироваться без ошибок, которые я вижу?

Полная функция ниже:

int CABC_DecodeCode::MirrorCheck(unsigned char* DataLineIndex, bool bThickLines, unsigned char* DataLineIndexOverlap, double *pSecondBestOverlapSum, unsigned int *pResultFlags)
{
int i, OverlapSize, NoMirrorDataLineSum, MirrorDataLineSum;
unsigned char* MirrorDataLineIndex, MirrorDataLineIndexOverlap;
double *pNoMirrorSecondBestOverlapSum, *pMirrorSecondBestOverlapSum;

MirrorDataLineIndex            = NULL;
MirrorDataLineIndexOverlap     = NULL;

NoMirrorDataLineSum            = 0;
MirrorDataLineSum              = 0;

if (pSecondBestOverlapSum)
{
pNoMirrorSecondBestOverlapSum   = new double;
pMirrorSecondBestOverlapSum     = new double;

*pNoMirrorSecondBestOverlapSum  = 0.0;
*pMirrorSecondBestOverlapSum    = 0.0;
}

// normal decode
for (i=0; i<m_NrofDataLines; i++)
DataLineIndex[i] = GetDataLineIndex(i, bThickLines, DataLineIndexOverlap, pNoMirrorSecondBestOverlapSum, &NoMirrorDataLineSum);

FlipCode();

// flipped image decode
MirrorDataLineIndex            = new unsigned char[m_NrofDataLines];

if (DataLineIndexOverlap)
{
OverlapSize = m_NrofDataLines*m_PosPerSector*m_PosPerSector;
MirrorDataLineIndexOverlap  = new unsigned char[OverlapSize];

}

for (i=0; i<m_NrofDataLines; i++)
MirrorDataLineIndex[i] = GetDataLineIndex(i, bThickLines, MirrorDataLineIndexOverlap, pMirrorSecondBestOverlapSum, &MirrorDataLineSum);if (MirrorDataLineSum < NoMirrorDataLineSum)
{
if (pResultFlags)
*pResultFlags |= RF_MIRRORRED_CODE;

memcpy(DataLineIndex, MirrorDataLineIndex, m_NrofDataLines);

if (DataLineIndexOverlap)
memcpy(DataLineIndexOverlap, MirrorDataLineIndexOverlap, OverlapSize);

if (pSecondBestOverlapSum)
*pSecondBestOverlapSum = *pMirrorSecondBestOverlapSum;
}
else
{
FlipCode();

if (pResultFlags)
*pResultFlags &= ~RF_MIRRORRED_CODE;

if (pSecondBestOverlapSum)
*pSecondBestOverlapSum = *pNoMirrorSecondBestOverlapSum;
}

delete [] MirrorDataLineIndex;

if (MirrorDataLineIndexOverlap)
delete [] MirrorDataLineIndexOverlap;

if (pMirrorSecondBestOverlapSum)
delete pMirrorSecondBestOverlapSum;

if (pNoMirrorSecondBestOverlapSum)
delete pNoMirrorSecondBestOverlapSum;

return 1;
}

2

Решение

unsigned char* MirrorDataLineIndex, MirrorDataLineIndexOverlap;

Это заявляет MirrorDataLineIndex быть unsigned char * а также MirrorDataLineIndexOverlap быть unsigned char, Заменить:

unsigned char *MirrorDataLineIndex, *MirrorDataLineIndexOverlap;
2

Другие решения

Эта линия

unsigned char* MirrorDataLineIndex, MirrorDataLineIndexOverlap;

является эквивалентом

unsigned char *MirrorDataLineIndex;
unsigned char MirrorDataLineIndexOverlap;

Возможно, это не было намерением.

Вы можете рассмотреть возможность использования

typedef unsigned char BYTE;
typedef BYTE *LPBYTE;
2

По вопросам рекламы [email protected]