我正在将Windows DLL转换为Linux SO。我已将所有类型BYTE转换为unsigned char和LPBYTE为unsigned char *。在Win DLL中将LPBYTE更改为无符号字符*后的C++编译器错误至Linux SO转换
编译器是给我在一个功能错误如下:
在这两行Error: Invalid Conversion from 'char*' to 'unsigned char'
Error: Invalid Conversion from 'unsigned char' to 'unsigned char*'
具体来说:
if (DataLineIndexOverlap){
OverlapSize = m_NrofDataLines*m_PosPerSector*m_PosPerSector;
MirrorDataLineIndexOverlap = new unsigned char[OverlapSize];
}
OverlapSize被定义为int和MirrorDataLineIndexOverlap是在原来的LPBYTE Windows代码,现在是一个无符号字符*,新的无符号字符[OverlapSize]是原始Windows代码中的新BYTE [OverlapSize]。之后还有其他错误,它们都与MirrorDataLineIndexOverlap有关,所以我假定最初的无效转换错误是根本原因。
我正在寻找最干净的方法来解决这个编译器错误和其他没有打破代码的其余部分的错误。 Linux C++中的LPBYTE是否有一个干净的替代品,可以在没有我看到的错误的情况下进行编译?
全功能低于:
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;
}
谢谢dxiv,工作。我非常感谢支持。 – Cosworth66