2011-10-17 128 views
1

我打電話C++從C#代碼的方法和傳遞的2D陣列的第一個元素的指針,並且陣列的C++函數的尺寸:轉換指針二維數組

C#代碼

fixed (bool* addressOfMonochromeBoolMatrixOfBitmap = &monochromeBoolMatrixOfBitmap[0, 0] 
{    
    NativeGetUniquenessMatrixOfBitmap(addressOfMonochromeBoolMatrixOfBitmap, Width, Height);   
} 

C++代碼

extern "C" __declspec(dllexport) void NativeGetUniquenessMatrixOfBitmap (bool* addressOfMonochromeBoolMatrixOfBitmap, 
    int boolMatrixWidth, int boolMatrixHeight) 
{ 
} 

在C++代碼欲投的布爾*指針2D ARR ay,以便使用常規數組語法訪問元素:someArray [1] [4]。 我試過這段代碼:

bool (*boolMatrix)[boolMatrixWidth][boolMatrixHeight] = (bool (*)[boolMatrixWidth][boolMatrixHeight])addressOfMonochromeBoolMatrixOfBitmap; 

但它不會編譯給消息「預期的常量表達式」。

請分享任何想法。謝謝。

回答

2

在C++ 2D數組中,只有一個數組維度可以來自變量,另一個數組維度必須是常量。所以你必須保持指針並手動計算每個像素的地址。

我擔心你必須調整高度和寬度,即正確的可能是[高度] [寬度]。如果是這樣,那麼高度可以是可變的,但寬度必須是恆定的。如果不恆定,則必須保持bool*指針和每行的計算地址(如row = address + width*y),然後可以使用row[x]訪問行中的特定項目。

//we prepare row pointer to read at position x,y 
bool *row = addressOfMonochromeBoolMatrixOfBitmap + boolMatrixWidth * y; 

//example: read from x,y 
bool value_at_xy = row[x]; 

//example: move to next row 
row += boolMatrixWidth;