Как отобразить значение указателя В MFC?

100
13

У меня есть карта захвата от компании 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

Я хочу знать:

Как я могу отобразить значение voidPtrToFrame в элементе управления Edit? т.е. я хочу представить адрес буфера, содержащего видеокадр. На следующем рисунке я предоставил необходимую информацию о методе GetBytes.

enter image description here

Я много гугл и протестировал несколько способов. Но я не смог реализовать их в MFC.

спросил(а) 2021-01-25T18:35:14+03:00 4 месяца, 2 недели назад
1
Решение
77

У вас есть две проблемы:

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);

ответил(а) 2021-01-25T18:35:14+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема