我正在尝试使用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指针作为参数,但我一直遇到这些错误。
非常感谢您的帮助!

最佳答案

在您的 header 之一(可能是using namespace System;)中使用using指令(AutomationCPP.h)导致了此问题。

您将间接包含servprov.h,后者具有 ::IServiceProvider 的定义,并且您具有using指令,它将 System::IServiceProvider 纳入全局范围。这会导致对不完全合格的IServiceProvider的任何使用都产生歧义。

摆脱using指令,而只对实际需要的命名空间System中的符号使用using声明。

09-28 07:09