2012-01-30 2 views
0

Я пытаюсь инициализировать GUID-указатель на значения NULL для использования с DirectX ... Я пишу синтаксический анализатор .X.Инициализация const GUID * (GUID pointer)

У меня возникли проблемы с инициализацией указателя GUID! Мне нужно сравнить входной тип GUID с файлом с внутренне определенными типами шаблонов, чтобы я мог сообщить своей программе, что делать с информацией в «шаблоне из файла».

Вот то, что я до сих пор:

BOOL cXMeshParser::ParseObject(LPD3DXFILEDATA pDataObj, DWORD Depth, void **data) 
{ 

    if(pDataObj->IsReference()) 
     return true; 

    GUID pTemplateGUID; 
    memset(&pTemplateGUID, 0, sizeof(GUID)); 

    GUID *pCpyGUID; 
    memset(&pCpyGUID, 0, sizeof(GUID)); 

    memcpy(&pCpyGUID, &pTemplateGUID, sizeof(GUID)); 

    pDataObj->GetType(pCpyGUID); 
    int isEqual =0; 
    isEqual = IsEqualGUID(*pCpyGUID, TID_D3DRMMesh); 
    if(isEqual){ 

      ... 
     } 
} 

когда я запускаю отладчик, данные в пределах pCpyGUID неверно (не NULL)

Я использовал регулярные GUID четкости (GUID pTemplateGUID) чтобы попытаться скопировать GUID в const GUID * (я могу инициализировать GUID ... не GUID *) ... текущая проблема с синтаксическим анализатором заключается в том, что сравнение данных шаблона и внутреннего определения невозможно оценить ...

Мой вопрос:

Как написать допустимую инициализацию для const GUID *?

ответ

2

pCpyGUID - это просто указатель, что означает, что его значение является адресом. Поскольку вы не инициализировали этот адрес, он указывает на случайную ячейку памяти, которая может быть нечитаемой и недоступной для записи.

В любом случае, вы также нулевой pTemplateGUID, а затем попытаться скопировать его pCpyGUID ...

Похоже, что вам не нужно как pTemplateGUID и pCpyGUID.

Вы, вероятно, хотели сделать:

GUID *pCpyGUID = &pTemplateGUID; 

Так pCpyGUID указывает на pTemplateGUID. Но вам это не нужно.

Попробуйте это:

GUID templateGUID; 

pDataObj->GetType(&templateGUID); 
int isEqual = IsEqualGUID(templateGUID, TID_D3DRMMesh); 
if(isEqual){ 
... 
+0

, которая работала много спасибо вам –

+0

рад, что это сработало. Просто не забудьте принять ответ;) – Asaf

Смежные вопросы