2016-02-28 37 views
2

我正在将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; 
} 

回答

2
unsigned char* MirrorDataLineIndex, MirrorDataLineIndexOverlap; 

这声明MirrorDataLineIndex是一个unsigned char *MirrorDataLineIndexOverlap是一个unsigned char。替换为:

unsigned char *MirrorDataLineIndex, *MirrorDataLineIndexOverlap; 
+0

谢谢dxiv,工作。我非常感谢支持。 – Cosworth66

2

此行

unsigned char* MirrorDataLineIndex, MirrorDataLineIndexOverlap; 

unsigned char *MirrorDataLineIndex; 
unsigned char MirrorDataLineIndexOverlap; 

等效也许是不意图。

您可以考虑使用

typedef unsigned char BYTE; 
typedef BYTE *LPBYTE; 
+0

AlexD这正是我所需要的。我更改为以下内容并解决问题。 unsigned char * MirrorDataLineIndex; unsigned char * MirrorDataLineIndexOverlap;谢谢!! – Cosworth66

相关问题