The warning 4190 is disabled because a C++ object calling from C section is manipulating only in C++ (outside of C section).
Second attempt to remove the warning: extern "C" is removed - everything works fine. But I tested it only on Windows.
Removed "Create##schema" method at all: without "extern "C"" it is useless. Checked that in OCCT and Samples this method is unused.
"new ##Schema" is used instead (like in StdDrivers.cxx, for an example). Also this approach is advised in Storage_Schema.cdl:
-- For example, if ShapeSchema is the class
-- inheriting from Storage_Schema and containing
-- the description of your application data schema,
-- you create a storage/retrieval algorithm as follows:
-- Handle(ShapeSchema) s = new
-- ShapeSchema;
// Read_TypeSelection
//
#define Storage_BEGIN_READ_SELECTION(schema) \
- extern "C" { \
- Standard_EXPORT Handle(Storage_Schema) Create##schema() { return new schema; } \
- } \
Handle(Storage_CallBack) schema::CallBackSelection(const TCollection_AsciiString& rt) const \
{ \
Handle(Standard_Persistent) p; \