Здравствуйте, Vain, Вы писали:
V>Перевожу исходники с WIN32 на WINCE. Есть некоторые проблемы, к примеру, в WINCE часто нету функций принимающих multibyte значения, а есть токо для char* и для wchar_t* типов. Или просто нету функции, которая есть в WIN32. Решил написать обёртку такого рода:
V>(к примеру для функции GetCurrentProcess)
V>V>//GetCurrentProcess.h
V>#pragma once
V>#if defined(WIN32)
V>#include <Winbase.h>
V>#pragma comment(lib,"Kernel32.lib")
V>#pragma message("Linker: Automatically linking with Kernel32.lib")
V>#elif defined(WINCE)
V>#include <Kfuncs.h>
V>#pragma comment(lib,"Coredll.lib")
V>#pragma message("Linker: Automatically linking with Coredll.lib")
V>#endif
V>
V>Но иногда в WINCE функций нет, а в WIN32 есть:
V>(для функции _mbscmp)
V>V>//_mbscmp.h
V>#pragma once
V>#if defined(WIN32)
V>#include <mbstring.h>
V>#elif defined(WINCE)
V>#pragma message("Warning: _mbscmp function doesn't exist in WinCE platform")
V>#endif
V>
V>Далее просто включается в код, где используется функция вместо оригинальных заголовков, "обёрточные" заголовки.
V>Но мне не нравиться #pragma message, будет куча таких ненужных вообщемто сообщений.
V>Если заменить #pragma message на объявление _mbscmp — будет компилироваться, но не будет линковаться.
V>Думаю заменить на определение функции, чтобы при её вызове под WINCE компилятор начал ругаться в место определения, но незнаю что написать во внутрь.
V>V>//_mbscmp.h
V>#pragma once
V>#if defined(WIN32)
V>#include <mbstring.h>
V>#elif defined(WINCE)
V>int _mbscmp(const unsigned char *string1,const unsigned char *string2) {
V> //что сюда написать?
V>}
V>#endif
V>
V>Но ругаться он должен только при использовании функции.
1) проще всего
чуть ниже пиши #pragma deprecated(_mbscmp) и не дизабли 4995 варнинг
2) если для С++, то пиши шаблонную функцию, внутри которой boostовкий или lokiевский STATIC ASSERT.