powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Два #importa'a - пересекаются объявления классов
3 сообщений из 3, страница 1 из 1
Два #importa'a - пересекаются объявления классов
    #33445476
Kezya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем здравствуйте.
Делаю
...
Рейтинг: 0 / 0
Два #importa'a - пересекаются объявления классов
    #33445477
Kezya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VC++, MFC.
Делаю в программе
#import "..\imports\msado15.dll" no_namespace rename( "EOF", "EndOfFile" ) inject_statement("typedef BSTR DataMember;") //ADO
#import <todg8.ocx> no_namespace //inject_statement("typedef BSTR DataMember;") //контрол
Вылезают ошибки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
d:\Work\VC++ Projects\Tst\Debug\todg8.tlh( 144 ) : error C3121: cannot change GUID for class 'Error'
d:\Work\VC++ Projects\Tst\Debug\msado15.tlh( 1032 ) : see declaration of 'Error'
d:\Work\VC++ Projects\Tst\Debug\todg8.tlh( 146 ) : error C3121: cannot change GUID for class 'Errors'
d:\Work\VC++ Projects\Tst\Debug\msado15.tlh( 1086 ) : see declaration of 'Errors'
d:\Work\VC++ Projects\Tst\Debug\todg8.tlh( 1147 ) : error C2059: syntax error : '-'
d:\Work\VC++ Projects\Tst\Debug\todg8.tlh( 1147 ) : error C2238: unexpected token(s) preceding ';'
d:\Work\VC++ Projects\Tst\Debug\todg8.tlh( 3417 ) : error C2011: 'Error' : 'struct' type redefinition
d:\Work\VC++ Projects\Tst\Debug\msado15.tlh( 1032 ) : see declaration of 'Error'
d:\Work\VC++ Projects\Tst\Debug\todg8.tlh( 3460 ) : error C2011: 'Errors' : 'struct' type redefinition
d:\Work\VC++ Projects\Tst\Debug\msado15.tlh( 1086 ) : see declaration of 'Errors'
d:\Work\VC++ Projects\Tst\Debug\todg8.tlh( 4982 ) : error C2039: 'PutNumber' : is not a member of 'Error'
d:\Work\VC++ Projects\Tst\Debug\msado15.tlh( 1032 ) : see declaration of 'Error'
d:\Work\VC++ Projects\Tst\Debug\todg8.tlh( 4984 ) : error C2039: 'PutNativeError' : is not a member of 'Error'
d:\Work\VC++ Projects\Tst\Debug\msado15.tlh( 1032 ) : see declaration of 'Error'
d:\Work\VC++ Projects\Tst\Debug\todg8.tlh( 4986 ) : error C2039: 'PutDescription' : is not a member of 'Error'
d:\Work\VC++ Projects\Tst\Debug\msado15.tlh( 1032 ) : see declaration of 'Error'
d:\Work\VC++ Projects\Tst\Debug\todg8.tlh( 4988 ) : error C2039: 'PutSource' : is not a member of 'Error'
d:\Work\VC++ Projects\Tst\Debug\msado15.tlh( 1032 ) : see declaration of 'Error'
d:\Work\VC++ Projects\Tst\Debug\todg8.tlh( 4990 ) : error C2039: 'PutHelpFile' : is not a member of 'Error'
d:\Work\VC++ Projects\Tst\Debug\msado15.tlh( 1032 ) : see declaration of 'Error'
d:\Work\VC++ Projects\Tst\Debug\todg8.tlh( 4992 ) : error C2039: 'PutHelpContext' : is not a member of 'Error'
d:\Work\VC++ Projects\Tst\Debug\msado15.tlh( 1032 ) : see declaration of 'Error'
d:\Work\VC++ Projects\Tst\Debug\todg8.tlh( 4994 ) : error C2039: 'PutSQLState' : is not a member of 'Error'
d:\Work\VC++ Projects\Tst\Debug\msado15.tlh( 1032 ) : see declaration of 'Error'
d:\Work\VC++ Projects\Tst\Debug\todg8.tlh( 4995 ) : error C2039: 'Get_NewEnum' : is not a member of 'Errors'
d:\Work\VC++ Projects\Tst\Debug\msado15.tlh( 1086 ) : see declaration of 'Errors'

Насколько я понимаю, Error есть и в ADO (msado15.dll) и в контроле (todg8.tlh). Как их можно разделить, т.е. чтобы они не мешали друг-другу?
...
Рейтинг: 0 / 0
Два #importa'a - пересекаются объявления классов
    #33446119
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KezyaVC++, MFC.
Делаю в программе
#import "..\imports\msado15.dll" no_namespace rename( "EOF", "EndOfFile" ) inject_statement("typedef BSTR DataMember;") //ADO
#import <todg8.ocx> no_namespace //inject_statement("typedef BSTR DataMember;") //контрол
Вылезают ошибки
Код: plaintext
1.
2.
3.
d:\Work\VC++ Projects\Tst\Debug\todg8.tlh( 144 ) : error C3121: cannot change GUID for class 'Error'
d:\Work\VC++ Projects\Tst\Debug\msado15.tlh( 1032 ) : see declaration of 'Error'
...

Насколько я понимаю, Error есть и в ADO (msado15.dll) и в контроле (todg8.tlh). Как их можно разделить, т.е. чтобы они не мешали друг-другу?
Используй в impot'ах не no_namespace, а rename_namespace("<name>")
А затем обращайся к нужным функциям с использованием "расширения зоны видимости" (::).
Например, перепишем твои импорты:
Код: plaintext
1.
#import  "..\imports\msado15.dll"  rename_namespace("ADOCG") rename( "EOF", "EndOfFile" ) inject_statement("typedef BSTR DataMember;") //ADO
#import <todg8.ocx> rename_namespace("ACTIVEX") //inject_statement("typedef BSTR DataMember;") //контрол

а в программе будем пользовать:
Код: plaintext
1.
2.
3.
...
ADOCG::Error::<.....>;
ACTIVEX::Error::<....>;
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Два #importa'a - пересекаются объявления классов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]