如何在MFC中显示指针的值?

时间:2016-05-04 12:37:42

标签: c++ winapi mfc

我有Black Magic Design公司的采集卡。在相关文档中,描述了来自GetBytes接口的IDeckLinkVideoInputFrame方法允许直接访问视频帧的数据缓冲区。这是我的工作:

HRESULT     DeckLinkDevice::VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame* videoFrame, /* in */ IDeckLinkAudioInputPacket* audioPacket)
{
    char* str1;
    voidPtrToFrame = NULL;
    videoFrame->GetBytes(&voidPtrToFrame);
    sprintf(str1, "%p", voidPtrToFrame);
 // the below line does not work. 
    SetDlgItemText(m_uiDelegate->GetSafeHwnd(), IDC_handytxtBox, str1);
}

我还在voidPtrToFrame的课程中定义了DeckLinkDevice

class DeckLinkDevice::IDeckLinkInputCallback
{
...
void* voidPtrToFrame;
...
}

在最后一行中出现与str1

相关的错误
  

类型“char *”的参数与类型的参数不兼容   LPCWSTR

我想知道:

如何在Edit控件中显示voidPtrToFrame的值?即我想呈现包含视频帧的缓冲区的地址。在下图中,我提供了有关GetBytes方法的必要信息。

enter image description here

我搜索了很多东西并测试了几种方法。但我无法在MFC中实现它们。

1 个答案:

答案 0 :(得分:2)

你有两个问题:

<强> 1。您会遇到崩溃或至少未定义的行为

变量str1永远不会被初始化。这是一个经典的初学者错误。

问题在于:

char* str1;
voidPtrToFrame = NULL;
videoFrame->GetBytes(&voidPtrToFrame);

// here str1 points to an interterminate location, it has never been
// initialized !! Therefore your program most likely will crash
sprintf(str1, "%p", voidPtrToFrame)

你需要这个:

char str1[20]; //<<< changement here

voidPtrToFrame = NULL;
videoFrame->GetBytes(&voidPtrToFrame);

// now str1 points to a 20 byte buffer
sprintf(str1, "%p", voidPtrToFrame);

<强> 2。您必须使用宽字符

您正在为unicode进行编译,因此您需要这个(此前包含其他更正):

wchar_t str1[20];

voidPtrToFrame = NULL;
videoFrame->GetBytes(&voidPtrToFrame);

wsprintf(str1, L"%p", voidPtrToFrame);
SetDlgItemText(m_uiDelegate->GetSafeHwnd(), IDC_handytxtBox, str1);