Я хочу создать SDK, состоящий из заголовочного файла sdk.h с открытым API и скомпилированной DLL с реализацией.
If the code looks like:
//////////
// sdk.h
//////////
enum eAction
{
Action1,
Action2,
Action3
};
class Item
{
protected:
virtual ~Item(){}
public:
virtual void Do(eAction action) = 0;
virtual void Release() = 0;
};
extern "C"
{
Item * CreateItem();
}
//////////
// sdk.cpp
//////////
class ItemImpl: public Item
{
public:
virtual void Do(eAction action)
{
printf("%d", (int)action);
// do something
}
virtual void Release()
{
delete this;
}
};
Item * CreateItem()
{
return new ItemImpl;
}
//////////
// main.cpp client side
//////////
int main(int argc, char* argv[])
{
Item *pItem = CreateItem();
pItem->Do(Action1);
pItem->Release();
return 0;
}
// The file sdk.h is the public API.
// The file sdk.cpp is the implementation and it is compiled to sdk.dll.
// The file main.cpp is the client code that uses the SDK.
Мой вопрос:
Безопасно ли использовать перечисляемые параметры и возвращаемые значения в общедоступном API (метод Do (действие)), если SDK и код клиента скомпилированы с разными компиляторами? Например, SDK компилируется с помощью VC, а клиентский код - с помощью gcc. Возможно ли, чтобы разные компиляторы использовали разные размеры (2,4 или 8 байт) для представления перечисления?