初始化const GUID *(GUID指针)

时间:2012-01-30 18:02:56

标签: visual-studio-2008 winapi directx guid

我正在尝试将一个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 *?

编写有效的初始化

1 个答案:

答案 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){
 ...