2009-03-12 16 views
5

jestem próby utworzenia nowego obiektu COM w moim DLL za pomocą Kreatora ATL Simple Object w Visual Studio 2005.ATL Kreator prosty przedmiot - "Obiekt Xxx już istnieje" błąd

wprowadzić krótką nazwę obiekt i wszystkie inne pola są wyprowadzone.

Jednak po kliknięciu Dalej w kreatorze, następujący komunikat o błędzie pojawia się:

Object 'IXxxInterfaceName' already exists 

Przeszukałem całe moje rozwiązanie dla wszystkich odniesień do IXxxInterfaceName i nie widzę go nigdzie zdefiniowane.

W jaki sposób kreator określa, że ​​już istnieje?

Odpowiedz

2

Nigdy nie dowiedziałem się, dlaczego kreator ustalił, że nazwa obiektu już istnieje - zgaduję, że coś zostało zbuforowane gdzieś, czego nie mogłem wyśledzić.

Na końcu dodałem 2 na końcu nazwy interfejsu podczas tworzenia, co pozwoliło na dodanie. Następnie zamieniłem wszystkie wystąpienia IXxxInterfaceName2 na IXxxInterfaceName. Wszystko działało po tym.

Jeśli kiedykolwiek znajdę przyczynę problemu, zaktualizuję odpowiedź.

+0

Problem nadal istnieje i jest 2015. Usunięcie istniejącego "Prostego obiektu ATL" oznacza, że ​​nie można ponownie wygenerować. Przynajmniej nie znalazłem sposobu, żeby to zrobić. Nawet uciekłem się do czyszczenia rejestru z poprzednich prób. Microsoft nigdy nie był właścicielem tego problemu. – rtischer8277

+0

Obejście tego niepowodzenia generowania kodu prostego obiektu ATL po raz drugi polega na utworzeniu nowego projektu MFC z automatyzacją. Dodaj nową klasę typu Prosty obiekt ATL. Następnie skopiuj nowo wygenerowane. .... pliki rgs i .h oraz .cpp do twojego projektu. – rtischer8277

+0

Sprawdź swój plik .idl. Utworzenie "Prostego obiektu ATL" dodaje instrukcje interfejsu. Usuń wszystkie dodane linie i błąd zniknie. – rtischer8277

1

Czy jest zdefiniowany w bibliotece, do której się odwołujesz?

+0

mogłoby być. Czy potrafisz wymyślić prosty sposób, w jaki mógłbym to zrozumieć, nie musząc uciekać się do brutalnej siły dla każdej biblioteki, do której się odwołuję? – LeopardSkinPillBoxHat

+0

Właściwie teraz, kiedy o tym myślę, nie jest bardzo prawdopodobne, że byłby używany w bibliotece, do której się odwołuję. Nazwa interfejsu ma standardowy prefiks używany przez wszystkie interfejsy w naszym produkcie. Tak więc wątpię, aby jakiekolwiek biblioteki firm trzecich używały tej samej nazwy. – LeopardSkinPillBoxHat

+0

prawda. to dziwne. co się stanie, jeśli zmienisz nazwę nieco? –

0

zdarza się także w VS 2008. Jednak rozwiązanie Clean and Clean projekt z opcji kompilacji rozwiązuje ten :-)

Powiązane problemy