【发布时间】:2016-05-04 12:37:41
【问题描述】:
我有一张来自 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);
}
我还在DeckLinkDevice 的类中定义了voidPtrToFrame:
class DeckLinkDevice::IDeckLinkInputCallback
{
...
void* voidPtrToFrame;
...
}
最后一行出现与str1相关的错误:
“char*”类型的参数与类型的参数不兼容 LPCWSTR
我想知道:
如何在编辑控件中显示voidPtrToFrame 的值?即我想提供包含视频帧的缓冲区地址。在下图中,我提供了有关GetBytes 方法的必要信息。
我搜索了很多,并测试了几种方法。但我无法在 MFC 中实现它们。
【问题讨论】:
-
这与 Windows API、MFC 甚至 C++ 无关。它实际上只是关于 C、指针、未初始化的数据和未定义的行为。您应该首先阅读 C 的介绍,以了解它与托管执行环境(如 .NET)有何不同。
-
@IInspectable 问题的
SetDlgItemText部分 有点与Windows 相关。 -
请不要以使已发布答案无效的方式更改问题。此外,您甚至没有在此处使用任何特定于 MFC 的东西(查询窗口句柄除外)。在这种特殊情况下,使用 Windows API 的应用程序和使用 MFC 的应用程序几乎相同。您可能需要更多地研究 Windows API 以了解 MFC 如何适应这一点。然而,这个问题根本与 MFC 无关。
-
“我不知道 win32 应用程序中有 SetDlgItemText。” - SetDlgItemText 是从 user32.dll 导出的。这是 Win32 子系统(不是 MFC)的一部分。 “我在声明
str1时忘记输入[100]。” 这不是声明,而是定义。并且定义一个数组仍然使其内容未初始化。 “当你不认识我时不要评判。” - 我不必认识作者就可以判断问题的质量和准确性。