Глюк какой-то с интерфейсом IContextMenu
От: Аноним  
Дата: 04.05.04 08:04
Оценка:
Привет всем.


Пишу расширение для Explorera.
Есть у меня такой (уже не новый, но тем не менее) вопрос.
Что это за ошибки?

error C2787: 'IContextMenu' : no GUID has been associated with this object
error C2440: 'initializing' : cannot convert from 'DWORD_PTR' to 'const IID *'
error C2440: 'initializing' : cannot convert from 'ATL::_ATL_CREATORARGFUNC (__stdcall *)' to 'DWORD_PTR'

Почему в VC 6.0 их нет,а в VC, который в MS VS .NET 2003 они естть?

ошибка вылезает при добавлении этого интерфейса IContextMenu в карту интерфейсов

BEGIN_COM_MAP(CHandler)
..............
COM_INTERFACE_ENTRY(IContextMenu)
END_COM_MAP()

по настоятельному совету многих закачал себе 30 апреля 2004 года (это к вопролсу о версиях) Platform SDK. Поставил, все что нужно и ничего не изменилось.


ВОПРОС 2. Мог бы кто-нибудт объяснить, как связаны заголовочные файлы в директории VC++, то есть в
%Program Files%\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include с теми, что в
%Program Files%\Microsoft SDK\include\
Вроде бы в первой всего больше и весит она около 50 МБ, тогда как вторая где-то 37 МБ, по моему
Проще говоря, можно ли теперь, поставив SDK забить на все файлы (SDK) из стандартной поставки студии или нет?

Спасибо, ну и конечно, не забудьте про первый вопрос
Re: Глюк какой-то с интерфейсом IContextMenu
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 04.05.04 13:58
Оценка: 6 (1)
Здравствуйте, Аноним, Вы писали:

А>по настоятельному совету многих закачал себе 30 апреля 2004 года (это к вопролсу о версиях) Platform SDK. Поставил, все что нужно и ничего не изменилось.


в настройках студии, где прописаны include, bin, lib -каталоги, пути к Platform SDK поставлены выше родных каталогов студии?
Re[2]: Глюк какой-то с интерфейсом IContextMenu
От: kaas Россия  
Дата: 04.05.04 14:50
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>Здравствуйте, Аноним, Вы писали:


А>>по настоятельному совету многих закачал себе 30 апреля 2004 года (это к вопролсу о версиях) Platform SDK. Поставил, все что нужно и ничего не изменилось.


OE>в настройках студии, где прописаны include, bin, lib -каталоги, пути к Platform SDK поставлены выше родных каталогов студии?


привет, это я топик запостил — я теперь залогинился.
Да, все прописал, в смысле include, lib, source но все равно ничего не выходит.
Порывшись по заголовочным файлам можно вполне согласиться с компилятьором — GUIDа у этого интерфейса действительно чтто-то не видать
Re[3]: Глюк какой-то с интерфейсом IContextMenu
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 05.05.04 03:55
Оценка:
Здравствуйте, kaas, Вы писали:

OE>>в настройках студии, где прописаны include, bin, lib -каталоги, пути к Platform SDK поставлены выше родных каталогов студии?


K>Да, все прописал, в смысле include, lib, source но все равно ничего не выходит.


прописал выше всех остальных include?

K>Порывшись по заголовочным файлам можно вполне согласиться с компилятьором — GUIDа у этого интерфейса действительно чтто-то не видать


comdef.h:

struct __declspec(uuid("000214e4-0000-0000-c000-000000000046")) IContextMenu;
Re[4]: Глюк какой-то с интерфейсом IContextMenu
От: kaas Россия  
Дата: 05.05.04 06:11
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>
OE>struct __declspec(uuid("000214e4-0000-0000-c000-000000000046")) IContextMenu;
OE>


Да, правда, а я его искал в shlobj.h

К стати, я эту строку, ту, что выше — просто скопировал в свой заголовочный файл, там где объявлен мой COM-объект.
Скопмилился за милую душу.
Ну стало конечно интересно, в чем дело. Короче все эти uuid в файлике comdef.h имеют место только при следующем условии:

#if !defined(_COM_NO_STANDARD_GUIDS_)
......
struct __declspec(uuid("000214e4-0000-0000-c000-000000000046")) IContextMenu;
...

Но что это за _COM_NO_STANDARD_GUIDS_ было бы очень интересно узнать
Странно только, что в шестой версии все без проблем. А вообще почти все поисковики, типа Google, Yahoo, Altavista, даже Codeguru и Microsoft на вопрос "_COM_NO_STANDARD_GUIDS_" — отвечают однозначно: "Sorry, no results were found."
Намутили они там что-то...
Re[5]: Глюк какой-то с интерфейсом IContextMenu
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 05.05.04 06:31
Оценка:
Здравствуйте, kaas, Вы писали:

K>Да, правда, а я его искал в shlobj.h

K>К стати, я эту строку, ту, что выше — просто скопировал в свой заголовочный файл, там где объявлен мой COM-объект.
K>Скопмилился за милую душу.

а

#include <comdef.h>


не пробовал ?

K>Ну стало конечно интересно, в чем дело. Короче все эти uuid в файлике comdef.h имеют место только при следующем условии:


K>#if !defined(_COM_NO_STANDARD_GUIDS_)

K>......
K>struct __declspec(uuid("000214e4-0000-0000-c000-000000000046")) IContextMenu;
K>...

K>Но что это за _COM_NO_STANDARD_GUIDS_ было бы очень интересно узнать


ну типа не нужны тебе все эти IContextMenu, пишешь

#define _COM_NO_STANDARD_GUIDS_


и ничего не видишь

K>Намутили они там что-то...


думаешь они ?
Re[6]: Глюк какой-то с интерфейсом IContextMenu
От: kaas Россия  
Дата: 05.05.04 14:33
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>а


OE>
OE>#include <comdef.h>
OE>


OE>не пробовал ?


конечно пробовал — так и сделал. Я просто сообщение редактировал и стер пару строк. Но фишка видети ли в том, что....Я теперь уже похоже перестаю понимать основы см далее.

OE>ну типа не нужны тебе все эти IContextMenu, пишешь


OE>
OE>#define _COM_NO_STANDARD_GUIDS_
OE>


OE>и ничего не видишь


если ты это про себя (что ты ничего не увидел), — то ты счастливый человек, коли действительно закомпилил такой проект. Я все же еще объясню, почему я не понимаю основ.


#if !defined(_COM_NO_STANDARD_GUIDS_)
.....
struct __declspec(uuid("000214e4-0000-0000-c000-000000000046")) IContextMenu;
.....


эта зверская запись по моему говорит о том, что у нас имеются uuid интерфейсов, если НЕ определен _COM_NO_STANDARD_GUIDS_, там ведь #if !defined...
Ну то есть его надо наоборот разопределить. Я уже по всякому пробовал. Вот два варианта, исчерпывающих ситуацию (или один или другой):



    #if defined(_COM_NO_STANDARD_GUIDS_)
    #undef _COM_NO_STANDARD_GUIDS_
    #endif
    #include <comdef.h>

    #if !defined(_COM_NO_STANDARD_GUIDS_)
    #define _COM_NO_STANDARD_GUIDS_
    #endif
    #include <comdef.h>

Это все не работает. Та же самая ошибка и никаких результатов.

Помогает только это:

struct __declspec(uuid("000214e4-0000-0000-c000-000000000046")) IContextMenu;
#include <comdef.h>


Я то в принципе и так проект скомпилирую, но если бы кто объяснил этот замут, было бы очень неплохо.

K>>Намутили они там что-то...


OE>думаешь они ?


Команда мутеней..зеленых...
Re[7]: Глюк какой-то с интерфейсом IContextMenu
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 05.05.04 14:50
Оценка:
Здравствуйте, kaas, Вы писали:

K>
K>#if !defined(_COM_NO_STANDARD_GUIDS_)
K>.....
K>struct __declspec(uuid("000214e4-0000-0000-c000-000000000046")) IContextMenu;
K>.....
K>


K>эта зверская запись по моему говорит о том, что у нас имеются uuid интерфейсов, если НЕ определен _COM_NO_STANDARD_GUIDS_, там ведь #if !defined...

K>Ну то есть его надо наоборот разопределить.

его просто не надо определять

насчет "таких проектов" — берем например демо проектик из http://www.rsdn.ru/article/winshell/shlext1.xml
Автор(ы): Michael Dunn
Дата: 17.04.2001
— компилится на 7.1 влет, без единого писка насчет IContextMenu
Re[8]: Глюк какой-то с интерфейсом IContextMenu
От: kaas Россия  
Дата: 06.05.04 04:04
Оценка:
OE>насчет "таких проектов" — берем например демо проектик из http://www.rsdn.ru/article/winshell/shlext1.xml
Автор(ы): Michael Dunn
Дата: 17.04.2001
— компилится на 7.1 влет, без единого писка насчет IContextMenu


Читал я эти статьи еще на www.CodeProject.net. Это как раз такой проект, который компилится у меня в лет только на версии 6.
В общем, я уверен, что никаких косяков с инсталляцией студии у меня не было. Следовательно причина ошибки кроется по-моему где-то в исходных файлах SDK. Но так как проект все же можно с горем пополам закомпилить и с учетом этих косяков- можно считать, что тема закрыта
Спасибо за помощь.
Re[9]: Глюк какой-то с интерфейсом IContextMenu
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 06.05.04 04:34
Оценка:
Здравствуйте, kaas, Вы писали:

K>В общем, я уверен, что никаких косяков с инсталляцией студии у меня не было. Следовательно причина ошибки кроется по-моему где-то в исходных файлах SDK. Но так как проект все же можно с горем пополам закомпилить и с учетом этих косяков- можно считать, что тема закрыта


чтоб уж я тоже окончательно успокоился , можешь показать как у тебя выглядит вот это окошко:



K>Спасибо за помощь.
Глюк какой-то с интерфейсом IContextMenu
От: kaas Россия  
Дата: 06.05.04 11:24
Оценка:
#Имя: FAQ.com.icontextmenu
А>Что это за ошибки?
А>error C2787: 'IContextMenu' : no GUID has been associated with this object
А>error C2440: 'initializing' : cannot convert from 'DWORD_PTR' to 'const IID *'
А>error C2440: 'initializing' : cannot convert from 'ATL::_ATL_CREATORARGFUNC (__stdcall *)' to 'DWORD_PTR'
А>Почему в VC 6.0 их нет,а в VC, который в MS VS .NET 2003 они естть?
А>ошибка вылезает при добавлении этого интерфейса IContextMenu в карту интерфейсов
А>по настоятельному совету многих закачал себе 30 апреля 2004 года (это к вопролсу о версиях) Platform SDK. Поставил, все что нужно и ничего не изменилось.

OE>>в настройках студии, где прописаны include, bin, lib -каталоги, пути к Platform SDK поставлены выше родных каталогов студии?


K>В общем, я уверен, что никаких косяков с инсталляцией студии у меня не было. Следовательно причина ошибки кроется по-моему где-то в исходных файлах SDK. Но так как проект все же можно с горем пополам закомпилить и с учетом этих косяков- можно считать, что тема закрыта


OE>чтоб уж я тоже окончательно успокоился , можешь показать как у тебя выглядит вот это окошко:




K>>Спасибо за помощь.


Короче это... Оказывается comdef.h лежит изначально не в
VC7\PlatformSDK\Include, а в
VC7\Include. А у меня эта папка выше была, чем MicrodoftSDK — не хотел нарушать порядок, оказалось что зря...

Тем не менее, еще раз
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.