Armenian Knowledge Base  

Go Back   Armenian Knowledge Base > Technical sections > Languages, Compilers, Interpreters
Register

Reply
 
LinkBack Thread Tools
Old 24.01.2004, 15:52   #1
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Default Несовместимость "C"-кода с windows.h

вопрос воттакенный: есть в код, в котором есть:

enum insts
{ ..., IN, OUT, ... }

при подключении "windows.h" компилер, естессно, ругаитца.
как обойти ?

namespace-ы вроде (?) не помогут..

P.S. менять define-ы низя.
Reply With Quote
Old 24.01.2004, 19:10   #2
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

1. namespace-ы помогут, но это уже не будет c код.
2. можешь объявить енум в структуре или в классе, ни как понимаешь это тоже не сцы код.
3....
Reply With Quote
Old 25.01.2004, 08:27   #3
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Default

Quote:
Originally Posted by Agregat
1. namespace-ы помогут, но это уже не будет c код.
2. можешь объявить енум в структуре или в классе, ни как понимаешь это тоже не сцы код.
3....
Agregat: я ж сказал: менять структуры низя, тока код, их обрабатывающий.

И исчо: советуемый код - в студию, плиз.
Reply With Quote
Old 25.01.2004, 09:33   #4
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

А какую ошибку дает компилятор?
Могу предложить следующий вариант, но я не знаю будет ли он работать.
Попробовать стоит
PHP Code:
... your code
namespace WinNamespace
{
#include <windows.h>
}

... 
again your code
DWORD dwRet 
WinNamespace::WaitForSingleObject(hThreadINFINITE); 
Reply With Quote
Old 25.01.2004, 10:34   #5
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Default

а константы-переменые?
DWORD, hThread, INFINITE

Не, не пойдет, батенька.
Reply With Quote
Old 25.01.2004, 10:41   #6
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

Quote:
Originally Posted by Greco El
а константы-переменые?
DWORD, hThread, INFINITE

Не, не пойдет, батенька.
Господин Казарян, думайте немного сами:
WinNamespace:WORD;
WinNamespace::HANDLE;
WinNamespace::INFINITE;
Кода больше проблем меньше. Я уже попробовал, все работает.
Reply With Quote
Old 25.01.2004, 10:44   #7
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

Кстати в цпп файлах, где такой проблемы нет можно написать
using namespace WinNamespace;
и тогда эти префиксы не понадобятся.
Reply With Quote
Old 25.01.2004, 12:02   #8
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Default

WORD
класный тип данных. Веселый.
спасибо за базар, Агрегат!
Reply With Quote
Old 25.01.2004, 12:18   #9
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Default а вот и правильный ответ

а вот и правильный ответ на мой вопрос.
(проверку правильности кое-кто может выполнить как домашнее задание )


Code:
#ifdef __cplusplus
extern "C" {
#endif

#include <windows.h>
...
void UtilizeWindowsFunctions()
{
    SetConsoleTextAttribute ( GetStdHandle(STD_OUTPUT_HANDLE),
                              FOREGROUND_RED |
                                FOREGROUND_GREEN |
                                FOREGROUND_BLUE );
}
...

#ifdef __cplusplus
}
#endif
не нужно никаких C++, никаких namespace-ов. Классика.
Reply With Quote
Old 25.01.2004, 12:31   #10
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

Базара не было, но пожалуйста.
Reply With Quote
Old 25.01.2004, 12:32   #11
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

Если у тебя в программе много сотен вызовов разных АПИ напишешь много сотен разных wrappero-v? Иль каждый раз будешь ставить этот блок?
Reply With Quote
Old 25.01.2004, 12:37   #12
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

Еще меня интересует один вопрос. Почему не компилится оригинальное приложение?
Reply With Quote
Old 25.01.2004, 15:13   #13
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Default

Quote:
Originally Posted by Agregat
Если у тебя в программе много сотен вызовов разных АПИ напишешь много сотен разных wrappero-v? Иль каждый раз будешь ставить этот блок?
ты невнимателен: wrapper ставится не на вызовы, а на код этих "windows-dependable"-функций.

Вызываешь функции без каких-либо "оберток".
Reply With Quote
Old 25.01.2004, 19:32   #14
ЙЦУКЕН
 
Join Date: 07 2002
Location: 0x68,0x69,0x72, 0x69,0x6e,0x67, 0x20,0x6e,0x6f, 0x77
Age: 47
Posts: 3,118
Downloads: 0
Uploads: 0
Reputation: 5 | 0
Default

покоцать windows.h тебе что не позволяет?
моральноэтические принципы или еще чего ?

замени ты этот IN,OUT,хез на MY_IN,MY_OUT,MY_хез и не мучайся....
Reply With Quote
Old 25.01.2004, 19:35   #15
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

Гаспар - у меня вообще все легко компилится... Я так и не понял, что у господина Казаряна было не то...
Reply With Quote
Sponsored Links
Reply

Thread Tools


На правах рекламы:
реклама

All times are GMT. The time now is 06:36.


Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.