我从C#代码调用C ++方法并将2D数组的第一个元素的指针传递给C ++函数,并将数组的维度传递给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 ++代码中,我想将bool *指针强制转换为2D数组,以便使用传统的数组语法访问元素:someArray [1] [4]。 我试过这段代码:
bool (*boolMatrix)[boolMatrixWidth][boolMatrixHeight] = (bool (*)[boolMatrixWidth][boolMatrixHeight])addressOfMonochromeBoolMatrixOfBitmap;
但它没有编译给出消息“预期的常量表达式”。
请分享任何想法。感谢。
答案 0 :(得分: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;