2

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;
}
4

2 に答える 2

2

この行

unsigned char* MirrorDataLineIndex, MirrorDataLineIndexOverlap;

と同等です

unsigned char *MirrorDataLineIndex;
unsigned char MirrorDataLineIndexOverlap;

おそらくそれは意図ではありませんでした。

あなたは使用を検討するかもしれません

typedef unsigned char BYTE;
typedef BYTE *LPBYTE;
于 2016-02-28T00:52:15.460 に答える
2
unsigned char* MirrorDataLineIndex, MirrorDataLineIndexOverlap;

これは であり、 であると宣言MirrorDataLineIndexします。と置換する:unsigned char *MirrorDataLineIndexOverlapunsigned char

unsigned char *MirrorDataLineIndex, *MirrorDataLineIndexOverlap;
于 2016-02-28T00:52:23.407 に答える