инициализация: невозможно преобразовать из ошибки LPVOID

Хорошо, я пытаюсь написать это под WFSExecute, но если я наберу:

WFSPINGETDATA * pingetdata = lpCmdData;

Я получаю ошибку:

errorC2440: «инициализация»: невозможно преобразовать из «LPVOID» в «WFSPINGETDATA *»

Если я закомментирую эту строку, приложение выполнится.

Также, если я напишу:

((WFSPINDATA*) (temp)) ->lpPinKeys = malloc(sizeof(LPWFSPINKEY)*NumberOfKeys) ;

Я получаю ошибку:

errorC2440: ‘=’ не может конвертировать из ‘void’ в ‘LPWFSPINKEY *’

Любое решение, чтобы решить это?

0

Решение

C ++ более строг в отношении безопасности типов, чем C. В этом случае, void* должен быть приведен к типу при назначении чему-либо, кроме другого void*,

WFSPINGETDATA * pingetdata = lpCmdData;

невозможно преобразовать из ‘LPVOID’ в ‘WFSPINGETDATA *’

Это означает lpCmdData это void*, так что приведение типа необходимо:

WFSPINGETDATA * pingetdata = (WFSPINGETDATA*) lpCmdData;

Или, используя приведение в стиле C ++ вместо преобразования в стиле C:

WFSPINGETDATA * pingetdata = static_cast<WFSPINGETDATA*>(lpCmdData);
((WFSPINDATA*) (temp)) ->lpPinKeys = malloc(sizeof(LPWFSPINKEY)*NumberOfKeys) ;

не может конвертировать из ‘void’ в ‘LPWFSPINKEY *’

malloc() возвращает void*поэтому здесь также необходимо приведение типов:

((WFSPINDATA*) (temp)) ->lpPinKeys = (LPWFSPINKEY*) malloc(sizeof(LPWFSPINKEY)*NumberOfKeys);

Или, используя приведения в стиле C ++:

static_cast<WFSPINDATA*>(temp)->lpPinKeys = static_cast<LPWFSPINKEY*>(malloc(sizeof(LPWFSPINKEY)*NumberOfKeys));

Или, используя выделение в стиле C ++ вместо выделения в стиле C:

static_cast<WFSPINDATA*>(temp)->lpPinKeys = new LPWFSPINKEY[NumberOfKeys];
// must use 'delete[] lpPinKeys' instead of 'free(lpPinKeys)' to deallocate the memory
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]