Ошибка 3699, создание GUID для объектов - PullRequest
3 голосов
/ 06 июля 2011

Я пытаюсь использовать 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 ]

11 голосов
/ 06 июля 2011

Использование директивы (using namespace System;) в одном из ваших заголовков (вероятно, AutomationCPP.h) вызывает проблему.

Вы косвенно включаете servprov.h, который имеет определение для ::IServiceProvider, и вы получили директиву using, которая выводит System::IServiceProvider в глобальную объем. Это вызывает неоднозначность при любом использовании IServiceProvider, который не полностью квалифицирован.

Избавьтесь от директивы using и вместо этого используйте объявления только для тех символов в пространстве имен System, которые вам действительно нужны.

0 голосов
/ 07 июля 2011

UIAguid неинициализирован. Вы должны предоставить указатель на буфер, например:

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

Но если вы используете C ++ / CLI, почему бы вам не использовать .NET Guid type ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...