|
|
|
Как расширение файла влияет на компиляцию?
|
|||
|---|---|---|---|
|
#18+
Помогите начинающему в С++ разобраться. Есть SDK от одного производителя, выпущенное довольно давно, может где-то в 1998 году. В документации к нему написано, что думано использовать с Microsoft Visual C++ 2.0 и выше. На основе этого надо создать приложение с возможностью работать через сокеты. Наткнулся на такие грабли: 1. Все файлы SDK имеют расширение .c и нормально компилируются, т.е. без ошибок. Добавляю в главный файл подключение библиотеки #include <Winsock2.h> и в программе определяю переменную sockaddr_in sa;. При компиляцию выдается ошибка типа: pdk.c(251) : error C2065: 'sockaddr_in' : undeclared identifier pdk.c(251) : error C2146: syntax error : missing ';' before identifier 'sa' pdk.c(251) : error C2065: 'sa' : undeclared identifier Сравнил с работающим проектом, пришел к выводу, что не нравиться расширение файла. Поменял его с .c на .cpp Теперь на переменную sa не ругается но вылезло куча других ошибок, например: crserver.h(377) : error C2059: syntax error : 'private' crserver.h(377) : error C2238: unexpected token(s) preceding ';' pdk.cpp(232) : error C2440: 'initializing' : cannot convert from 'void *' to 'char *' Conversion from 'void*' to pointer to non-'void' requires an explicit cast В первом случае нашел, что есть такое определение typedef struct { CR_REQ_HDR reqHdr; /* request header */ char private[1]; /* private workspace data area */ } CR_PROTO_REQ; Во втором случае нашел, что не нравиться такая строка char *msg= NULL_P_VOID; NULL_P_VOID определено в другом файле как #define NULL_P_VOID ((void *) 0L) В первом случае я так понимаю что слово private зарезервировано. Что делать? Во втором случае не знаю в чем причина. Как расширение файла может так влиять на компиляцию? Какие могут быть рекомендации? 2. Как решается проблема переопределения? D:\Microsoft Platform SDK\include\Winsock2.h(1037) : error C2371: 'GROUP' : redefinition; different basic types D:\PDK\SOURCE\pdlapi.h(417) : see declaration of 'GROUP' Я так понимаю, что надо использовать пространство имен namespace для разрешения конфликта, т.е. в моем случае например весь файл pdlapi.h засунуть в одно пространство имен и обращаться используя оператор разрешения контекста ::. Или есть другое решение? В работе использую Windows XP SP2, Microsoft Visual C++ 6.0 SP6 + Microsoft Platform SDK for Windows Server 2003 Sp1. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 16:49 |
|
||
|
Как расширение файла влияет на компиляцию?
|
|||
|---|---|---|---|
|
#18+
Смена разрешения только меняет режим работы компилятора, с C на C++ или наоборот, да и то его можно задать явно с помощью соотв. ключа. Ты там разберить, если программа на С, ее на С и надо компилировать. Не надо ее на С++ пытаться скомпилировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 18:44 |
|
||
|
Как расширение файла влияет на компиляцию?
|
|||
|---|---|---|---|
|
#18+
bondПомогите начинающему в С++ разобраться. Есть SDK от одного производителя, выпущенное довольно давно, может где-то в 1998 году. В документации к нему написано, что думано использовать с Microsoft Visual C++ 2.0 и выше. На основе этого надо создать приложение с возможностью работать через сокеты. Дальше можно не читать :) К сожалению, совместимость библиотек снизу-вверх очень ограничена. Для устойчивой работы конкретно с этой библиотекой прийдется брать именно Microsoft Visual C++ 2.0. Для более поздних компиляторов прийдется вручную перелопачивать все заголовочные (и исходные если есть) файлы библиотеки и приводить их в современный вид. И то не гарантируется что заработает. Увы. Чаще всего "привод в современный вид" будет заключаться в поиске узких мест (как например уже показаные) и превращением их в код типа: Код: plaintext 1. 2. 3. 4. 5. Вообще, лучше всего взять более новую версию этой библиотеки (если нужна именно она), либо взять альтернативную современную библиотеку. Вариант с откатом на более раннюю версию компилятора рассматривать не будем? :) А по вопросу "Как расширение файла влияет на компиляцию?" ответ очень простой - запускамый модуль компилятора на основе расширения догадывается на каком языке написан этот конкретный исходник и запускает соответствующий парсер. Все. Этим можно управлять при помощи ключей (тогда компилятор не будет смотреть на расширение вообще). Но так извращаться очень не рекомендуется. Исходник на С должен компилироваться как С код, иначе в дальнейшем могут вылезти проблемы с узнаванием экспортированных имен. Это как минимум :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 20:20 |
|
||
|
Как расширение файла влияет на компиляцию?
|
|||
|---|---|---|---|
|
#18+
to MasterZiv В том то и дело что в документации написано что думано для Visual C++ to White Owl к сожаление новую библиотеку не достать, разработчик этот проект пустил на самотек, по крайней мере складывается такое впечатление. Попробую подогнать библиотеки, может моих знаний хватит ;) А как на счет второго вопроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 09:11 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33183229&tid=2032979]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 305ms |

| 0 / 0 |
