簡體   English   中英

將指針從C#傳遞到C ++

[英]Passing pointer from C# to C++

我正在嘗試從C#(作為short [])到C ++(作為無符號short *)傳遞2D掩碼(全為0,期望感興趣的區域為1s),但是我無法在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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM