Windows DLL を Linux SO に変換する作業を行っています。すべてのタイプ BYTE を unsigned char に変換し、LPBYTE を unsigned char* に変換しました。
コンパイラは、次のように 1 つの関数でエラーを出しています。
エラー: 'char*' から 'unsigned char' への変換が無効です
エラー: 'unsigned char' から 'unsigned char*' への変換が無効です
具体的には、次の 2 行で:
if (DataLineIndexOverlap){
OverlapSize = m_NrofDataLines*m_PosPerSector*m_PosPerSector;
MirrorDataLineIndexOverlap = new unsigned char[OverlapSize];
}
OverlapSize は int として定義され、MirrorDataLineIndexOverlap は元の Windows コードでは LPBYTE でしたが、現在は unsigned char* です。元の Windows コードでは、新しい unsigned char[OverlapSize] は新しい 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;
}