Booster |
Отправлено: 23.07.2005, 10:12 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 29
|
Помогите! Не пашит библиотека shlobj.h Скиньте пожалуйста по мылу! |
|
esh |
Отправлено: 24.07.2005, 03:22 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 71
|
И первая ошибка
[C++ Error] shobjidl.h(2193): E2238 Multiple declaration for 'FOLDERSETTINGS'
У меня то же самое, пока времени небыло разбираться.
Вобщем и мне пришлите
PS это не библиотека. |
|
Doga |
Отправлено: 25.07.2005, 11:41 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
2Booster
Что значит "Не пашит" ? Если Вы вручную не меяли его содержимое — всё должно работать. Подробнее можно?
2esh
У Вас то как раз всё в порядке Просто в подключенных библиотеках есть два одинаковых обьявления. Эта ошибка устраняется указанием области видимости. Например:
CODE |
Classes::TList *MyList;
|
|
|
esh |
Отправлено: 25.07.2005, 17:54 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 71
|
Хотя подожди, я его не использую, только подключаю, а он уже ругается... |
|
Doga |
Отправлено: 25.07.2005, 17:58 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
A если не используешь — зачем подключать?
Отредактировано Doga — 26/07/2005, 12:09
|
|
esh |
Отправлено: 26.07.2005, 01:29 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 71
|
Проблема именно в shobjidl.h, вот он, если кому интересно
22КБ
|
|
esh |
Отправлено: 26.07.2005, 01:39 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 71
|
У меня ошибки возникают при подключении shobjidl.h или shlobj.h, но тоже в shobjidl.h.
Сегодня даже Билдер переустановил -- не помогло.
Все, начинаю ковырять файл...
Отредактировано Георгий — 26/07/2005, 22:38 |
|
esh |
Отправлено: 26.07.2005, 02:31 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 71
|
Хе, там 10 тысяч строк...
Попробовал в пустом vcl проекте написать:
typedef struct random_struct
{
int i;
}FOLDERSETTINGS;
Эта фигня выдает ошибку, о которой я писал раньше.
Зато эти компилируются отлично:
typedef struct random_struct
{
int i;
}_FOLDERSETTINGS;
struct FOLDERSETTINGS
{
int i;
};
Я даже не знаю что делать... |
|
esh |
Отправлено: 26.07.2005, 03:21 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 71
|
Прогуглил, вот что получил:
QUOTE | I had the same error too. I was able to fix it by putting
#define NO_WIN32_LEAN_AND_MEAN
before
#include <vcl.h>
in the cpp file. |
Отредактировано esh — 26/07/2005, 12:08 |
|
Doga |
Отправлено: 26.07.2005, 12:19 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
CODE |
namespace MySettings
{
typedef struct random_struct
{
int i;
}FOLDERSETTINGS;
}
MySettings::FOLDERSETTINGS FS;
|
|
|
esh |
Отправлено: 27.07.2005, 02:42 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 71
|
Да не в этом дело. Структуру я создал для примера.
В shobjidl.h создается такая же (т.е. с таким же именем),
и именно это вызывает ошибку. Попробовал создать в пустом проекте,
та же ошибка, если создавать как
typedef struct random_struct
{
int i;
}FOLDERSETTINGS;
А если так
struct FOLDERSETTINGS
{
int i;
};
то никаких ошибок нет. Вот в чем дело.
А редактировать стандартные заголовки не хочется |
|
Doga |
Отправлено: 27.07.2005, 13:48 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Всё БРЕД: {...В первом случае сама структура не создается, только определяется её тип (typedef).
Во втором — сразу создаётся конкректный объект.}
В первом случае вводится новое имя типа для уже существующего типа.
Во втором — объявляется новйый тип.
Вот и вся разница
Отредактировано Doga — 29/07/2005, 14:34
|
|
Booster |
Отправлено: 27.07.2005, 20:15 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 29
|
Так что делать? |
|
GIZMO |
Отправлено: 27.07.2005, 22:39 |
|
Машинист паровоза
Группа: Участник
Сообщений: 174
|
QUOTE (Booster @ 27/07/2005, 20:15) | Так что делать? |
Project|Options|Directories/Conditionals в поле Conditionals Defines добавить NO_WIN32_LEAN_AND_MEAN
|
|
Booster |
Отправлено: 28.07.2005, 21:46 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 29
|
[C++ Error] E2075 Incorrect project override option: NO_WIN32_LEAN_AND_MEAN
[C++ Error] E2075 Incorrect project override option: NO_WIN32_LEAN_AND_MEAN
[C++ Error] Project1.cpp(28): E2451 Undefined symbol 'exception'
|
|
esh |
Отправлено: 29.07.2005, 00:32 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 71
|
QUOTE | В первом случае сама структура не создается, только определяется её тип (typedef).
Во втором — сразу создаётся конкректный объект. |
И где это во втором случае создается объект???
Там как раз определяется тип.
Отредактировано esh — 29/07/2005, 00:34 |
|
Doga |
Отправлено: 29.07.2005, 12:34 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
2esh
Вы правы. Тип, конечно, определяется. ВСЁ БРЕД: {но одновремено с этим создаётся и сам объект. Доступ к нему имеется непосредственно сразу после его объявления.}
Здесь Вам никто не запретит использовать в качестве имени объекта имя типа.
Проблема у Вас возникнет когда Вы попытаетесь объявить ещё одну структуру такого типа:
Компилятор выдаст ошибку, потому что объявление типа с таким именем уже существует (shobjidl.h).
Если Вы желаете определить свой собственный тип, не смотря на уже существующее объявление, воспльзуйтесь для него указанием конкретной области видимости (namespace). Пример см. выше.
Но мне кажется, проще изменить имя объявляемго Вами типа, чем городить, а затем, указывать для него область видимости
Отредактировано Doga — 29/07/2005, 14:40
|
|
esh |
Отправлено: 29.07.2005, 12:41 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 71
|
QUOTE | Вы правы. Тип, конечно, определяется, но одновремено с этим создаётся и сам объект. Доступ к нему имеется непосредственно сразу после его бъявления. |
И как это к нему обратиться???
QUOTE | Если Вы желаете определить свой собственный тип, не смотря на уже существующее объявление, воспльзуйтесь для него указанием конкретной области видимости (namespace). Пример см. выше.
Но мне кажется, проще изменить имя объявляемго Вами типа, чем городить, а затем, указывать для него область видимости |
Да не я его создаю, он определяется в стандартном заголовке. А менять его очень не хочется |
|
Doga |
Отправлено: 29.07.2005, 14:22 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Вместо файлов shobjidl.h и shlobj.h следует подключать shlobj.hpp
CODE |
struct FOLDERSETTINGS
{
int i;
};
FOLDERSETTINGS FOLDERSETTINGS;
FOLDERSETTINGS.i = 0;
|
|
|
esh |
Отправлено: 29.07.2005, 15:23 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 71
|
Спасибо, теперь понял. |
|
Георгий |
Отправлено: 29.07.2005, 20:28 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
QUOTE (Doga @ 29/07/2005, 15:22) | Вместо файлов shobjidl.h и shlobj.h следует подключать shlobj.hpp |
5 баллов!! Самое эффективное и простое решение! |
|
esh |
Отправлено: 30.07.2005, 00:52 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 71
|
Только оно не помогает, хотя файл нормально подключается.
А вот и фрагмент из shlobj.hpp
CODE | #if defined(NO_WIN32_LEAN_AND_MEAN)
#include <ole2.h>
#include <prsht.h>
#include <commctrl.h> // for LPTBBUTTON
#include <shlguid.h>
#include <shlobj.h>
#endif |
Всеже приходится делать
#define NO_WIN32_LEAN_AND_MEAN |
|
Doga |
Отправлено: 30.07.2005, 22:11 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Комментарий из shlobj.hpp:
QUOTE |
//-- user supplied -----------------------------------------------------------
// If problems occur when compiling win32 structs, records, or
// unions, please define NO_WIN32_LEAN_AND_MEAN to force inclusion
// of Windows header files.
|
2Георгий
|
|
esh |
Отправлено: 31.07.2005, 02:02 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 71
|
Об этом я и писал... |
|
Booster |
Отправлено: 02.08.2005, 23:20 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 29
|
СПАСИБО ВСЕМ!!! |
|