将指针从C#传递到C++

Passing pointer from C# to C++

本文关键字:C++ 指针      更新时间:2023-10-16

我正试图将一个2D掩码(所有0,除了感兴趣的区域为1)从C#(短[])传递到C++(无符号短*),但我无法在C++中获得正确的值。

C#

[DllImport("StatsManager.dll", EntryPoint = "SetStatsMask")]
private static extern int SetStatsMask(IntPtr mask, int imgWidth, int imgHeight);
short[] mask;
mask = new short[8*8];
// some operation here making a ROI in mask all 1.  ex 0000111100000000 in 1D 
IntPtr maskPtr = Marshal.AllocHGlobal(2 * mask.Length);
Marshal.Copy(mask, 0, maskPtr, mask.Length);
SetStatsMask(maskPtr, width, height);

C++

long StatsManager::SetStatsMask(unsigned short *mask, long width, long height)
{
    //create memory to store the incoming mask
    //memcpy the mask to the new buffer 
    //pMask = realloc(pMask,width*height*sizeof(unsigned short));
    long ret = TRUE;
    if (NULL == _pMask)
    {
        _pMask = new unsigned short[width * height];
    }
    else
    {
        realloc(_pMask,width*height*sizeof(unsigned short));
    }
    memcpy(mask,_pMask,width*height*sizeof(unsigned short));
    SaveBuffer(_pMask,  width,  height);
    return ret;
}

但我在C++中使用观察窗口只能看到52536而不是0000111100000000的掩码,所以我想知道我把哪里搞砸了?有人能帮忙吗?谢谢

我相信你把memcpy:的参数放错地方了

memcpy(mask,_pMask,width*height*sizeof(unsigned short));

据我所知,你想从mask复制到_pMask,所以你应该写:

memcpy(_pMask, mask, width*height*sizeof(unsigned short));