错误3699,为对象创建GUID

时间:2011-07-06 16:37:51

标签: c++ visual-c++ c++-cli

我正在尝试使用CoCreateGuid(GUID * guid)为我的应用程序中的对象创建一个guid。尝试使用此功能时出现一些错误。

error C3699: '*' : cannot use this indirection on type 'IServiceProvider' in servprov.h
error C2872: 'IServiceProvider' : ambiguous symbol in servprov.h
error C2371: 'IServiceProvider' : redefinition; different basic types in servprov.h

这是我正在使用的代码,目前并不多。

#include "Stdafx.h"
#include "AutomationCPP.h"
#include <Rpc.h>
#include <Guiddef.h>

using namespace System;

void AutomationCPP::CustomAutomationCPP::Instantiate()
{
    long result;
    unsigned char *guidstr;
    HRESULT hr;
    GUID *UIAguid;

    CoCreateGuid(UIAguid);  //errors here
}

它说要为参数使用GUID指针,但我不断收到这些错误。 非常感谢帮助!

2 个答案:

答案 0 :(得分:11)

您的某个标头中的using指令(using namespace System;)(可能是AutomationCPP.h)导致了问题。

您间接包含servprov.h,其中包含::IServiceProvider的定义,并且您已获得将System::IServiceProvider带入全局范围的using指令。这会导致任何使用IServiceProvider不完全合格的情况模糊不清。

删除using指令,而只使用声明仅用于实际需要的名称空间System中的符号。

答案 1 :(得分:0)

UIAguid未初始化。你应该提供一个指向缓冲区的指针,如:

GUID UIAguid;
CoCreateGuid(&UIAguid); // address of buffer you allocated

但是如果您使用的是C ++ / CLI,为什么不使用the .NET Guid type