我正在尝试将一个GUID指针初始化为NULL值,以便与DirectX一起使用...我正在编写一个.X文件解析器。
我在初始化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 def(GUID pTemplateGUID)尝试将GUID复制到const GUID *(我能够初始化GUID ...而不是GUID *)...解析器当前的问题是比较模板数据与内部定义之间无法评估...
我的问题是:
如何为const GUID *?
编写有效的初始化答案 0 :(得分:2)
pCpyGUID只是一个指针,这意味着它的值是一个地址。由于您没有初始化此地址,因此它指向一些随机内存位置,该位置可能是不可读且不可写的。
在任何情况下,你也将pTemplateGUID归零,然后尝试将其复制到pCpyGUID ......
看起来你不需要pTemplateGUID和pCpyGUID。
您可能想要这样做:
GUID *pCpyGUID = &pTemplateGUID;
所以pCpyGUID指向pTemplateGUID。 但你不需要这个。
试试这个:
GUID templateGUID;
pDataObj->GetType(&templateGUID);
int isEqual = IsEqualGUID(templateGUID, TID_D3DRMMesh);
if(isEqual){
...