我正在尝试使用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指针,但我不断收到这些错误。 非常感谢帮助!
答案 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?