Enforced the __cdecl calling convention on windows

This commit is contained in:
Filippo Cucchetto 2016-04-12 23:58:53 +02:00
parent c1b224a97a
commit 6e45393004
4 changed files with 137 additions and 128 deletions

View File

@ -3,8 +3,10 @@
#ifdef WIN32
#define DOS_API __declspec( dllexport )
#define DOS_CALL __cdecl
#else
#define DOS_API
#define DOS_CALL
#endif
#include <DOtherSide/DOtherSideTypes.h>
@ -15,82 +17,82 @@ extern "C"
#endif
// QCoreApplication
DOS_API char *dos_qcoreapplication_application_dir_path();
DOS_API char *DOS_CALL dos_qcoreapplication_application_dir_path();
// QGuiApplication
DOS_API void dos_qguiapplication_create();
DOS_API void dos_qguiapplication_exec();
DOS_API void dos_qguiapplication_quit();
DOS_API void dos_qguiapplication_delete();
DOS_API void DOS_CALL dos_qguiapplication_create();
DOS_API void DOS_CALL dos_qguiapplication_exec();
DOS_API void DOS_CALL dos_qguiapplication_quit();
DOS_API void DOS_CALL dos_qguiapplication_delete();
// QApplication
DOS_API void dos_qapplication_create();
DOS_API void dos_qapplication_exec();
DOS_API void dos_qapplication_quit();
DOS_API void dos_qapplication_delete();
DOS_API void DOS_CALL dos_qapplication_create();
DOS_API void DOS_CALL dos_qapplication_exec();
DOS_API void DOS_CALL dos_qapplication_quit();
DOS_API void DOS_CALL dos_qapplication_delete();
// QQmlApplicationEngine
DOS_API DosQQmlApplicationEngine *dos_qqmlapplicationengine_create();
DOS_API void dos_qqmlapplicationengine_load(DosQQmlApplicationEngine *vptr, const char *filename);
DOS_API void dos_qqmlapplicationengine_load_url(DosQQmlApplicationEngine *vptr, DosQUrl *url);
DOS_API void dos_qqmlapplicationengine_load_data(DosQQmlApplicationEngine *vptr, const char *data);
DOS_API void dos_qqmlapplicationengine_add_import_path(DosQQmlApplicationEngine *vptr, const char *path);
DOS_API DosQQmlContext *dos_qqmlapplicationengine_context(DosQQmlApplicationEngine *vptr);
DOS_API void dos_qqmlapplicationengine_delete(DosQQmlApplicationEngine *vptr);
DOS_API DosQQmlApplicationEngine *DOS_CALL dos_qqmlapplicationengine_create();
DOS_API void DOS_CALL dos_qqmlapplicationengine_load(DosQQmlApplicationEngine *vptr, const char *filename);
DOS_API void DOS_CALL dos_qqmlapplicationengine_load_url(DosQQmlApplicationEngine *vptr, DosQUrl *url);
DOS_API void DOS_CALL dos_qqmlapplicationengine_load_data(DosQQmlApplicationEngine *vptr, const char *data);
DOS_API void DOS_CALL dos_qqmlapplicationengine_add_import_path(DosQQmlApplicationEngine *vptr, const char *path);
DOS_API DosQQmlContext *DOS_CALL dos_qqmlapplicationengine_context(DosQQmlApplicationEngine *vptr);
DOS_API void DOS_CALL dos_qqmlapplicationengine_delete(DosQQmlApplicationEngine *vptr);
// QQuickView
DOS_API DosQQuickView *dos_qquickview_create();
DOS_API void dos_qquickview_show(DosQQuickView *vptr);
DOS_API char *dos_qquickview_source(DosQQuickView *vptr);
DOS_API void dos_qquickview_set_source_url(DosQQuickView *vptr, DosQUrl *url);
DOS_API void dos_qquickview_set_source(DosQQuickView *vptr, const char *filename);
DOS_API void dos_qquickview_set_resize_mode(DosQQuickView *vptr, int resizeMode);
DOS_API void dos_qquickview_delete(DosQQuickView *vptr);
DOS_API DosQQmlContext *dos_qquickview_rootContext(DosQQuickView *vptr);
DOS_API DosQQuickView *DOS_CALL dos_qquickview_create();
DOS_API void DOS_CALL dos_qquickview_show(DosQQuickView *vptr);
DOS_API char *DOS_CALL dos_qquickview_source(DosQQuickView *vptr);
DOS_API void DOS_CALL dos_qquickview_set_source_url(DosQQuickView *vptr, DosQUrl *url);
DOS_API void DOS_CALL dos_qquickview_set_source(DosQQuickView *vptr, const char *filename);
DOS_API void DOS_CALL dos_qquickview_set_resize_mode(DosQQuickView *vptr, int resizeMode);
DOS_API void DOS_CALL dos_qquickview_delete(DosQQuickView *vptr);
DOS_API DosQQmlContext *DOS_CALL dos_qquickview_rootContext(DosQQuickView *vptr);
// QQmlContext
DOS_API char *dos_qqmlcontext_baseUrl(DosQQmlContext *vptr);
DOS_API void dos_qqmlcontext_setcontextproperty(DosQQmlContext *vptr, const char *name, DosQVariant *value);
DOS_API char *DOS_CALL dos_qqmlcontext_baseUrl(DosQQmlContext *vptr);
DOS_API void DOS_CALL dos_qqmlcontext_setcontextproperty(DosQQmlContext *vptr, const char *name, DosQVariant *value);
// CharArray
DOS_API void dos_chararray_delete(char *ptr);
DOS_API void DOS_CALL dos_chararray_delete(char *ptr);
// QVariant
DOS_API DosQVariant *dos_qvariant_create();
DOS_API DosQVariant *dos_qvariant_create_int(int value);
DOS_API DosQVariant *dos_qvariant_create_bool(bool value);
DOS_API DosQVariant *dos_qvariant_create_string(const char *value);
DOS_API DosQVariant *dos_qvariant_create_qobject(DosQObject *value);
DOS_API DosQVariant *dos_qvariant_create_qvariant(DosQVariant *value);
DOS_API DosQVariant *dos_qvariant_create_float(float value);
DOS_API DosQVariant *dos_qvariant_create_double(double value);
DOS_API void dos_qvariant_setInt (DosQVariant *vptr, int value);
DOS_API void dos_qvariant_setBool (DosQVariant *vptr, bool value);
DOS_API void dos_qvariant_setFloat (DosQVariant *vptr, float value);
DOS_API void dos_qvariant_setDouble (DosQVariant *vptr, double value);
DOS_API void dos_qvariant_setString (DosQVariant *vptr, const char *value);
DOS_API void dos_qvariant_setQObject(DosQVariant *vptr, DosQObject *value);
DOS_API bool dos_qvariant_isnull (DosQVariant *vptr);
DOS_API void dos_qvariant_delete (DosQVariant *vptr);
DOS_API void dos_qvariant_assign (DosQVariant *vptr, DosQVariant *other);
DOS_API int dos_qvariant_toInt (DosQVariant *vptr);
DOS_API bool dos_qvariant_toBool (DosQVariant *vptr);
DOS_API char *dos_qvariant_toString (DosQVariant *vptr);
DOS_API float dos_qvariant_toFloat (DosQVariant *vptr);
DOS_API double dos_qvariant_toDouble (DosQVariant *vptr);
DOS_API DosQObject *dos_qvariant_toQObject(DosQVariant *vptr);
DOS_API DosQVariant *DOS_CALL dos_qvariant_create();
DOS_API DosQVariant *DOS_CALL dos_qvariant_create_int(int value);
DOS_API DosQVariant *DOS_CALL dos_qvariant_create_bool(bool value);
DOS_API DosQVariant *DOS_CALL dos_qvariant_create_string(const char *value);
DOS_API DosQVariant *DOS_CALL dos_qvariant_create_qobject(DosQObject *value);
DOS_API DosQVariant *DOS_CALL dos_qvariant_create_qvariant(DosQVariant *value);
DOS_API DosQVariant *DOS_CALL dos_qvariant_create_float(float value);
DOS_API DosQVariant *DOS_CALL dos_qvariant_create_double(double value);
DOS_API void DOS_CALL dos_qvariant_setInt (DosQVariant *vptr, int value);
DOS_API void DOS_CALL dos_qvariant_setBool (DosQVariant *vptr, bool value);
DOS_API void DOS_CALL dos_qvariant_setFloat (DosQVariant *vptr, float value);
DOS_API void DOS_CALL dos_qvariant_setDouble (DosQVariant *vptr, double value);
DOS_API void DOS_CALL dos_qvariant_setString (DosQVariant *vptr, const char *value);
DOS_API void DOS_CALL dos_qvariant_setQObject(DosQVariant *vptr, DosQObject *value);
DOS_API bool DOS_CALL dos_qvariant_isnull (DosQVariant *vptr);
DOS_API void DOS_CALL dos_qvariant_delete (DosQVariant *vptr);
DOS_API void DOS_CALL dos_qvariant_assign (DosQVariant *vptr, DosQVariant *other);
DOS_API int DOS_CALL dos_qvariant_toInt (DosQVariant *vptr);
DOS_API bool DOS_CALL dos_qvariant_toBool (DosQVariant *vptr);
DOS_API char *DOS_CALL dos_qvariant_toString (DosQVariant *vptr);
DOS_API float DOS_CALL dos_qvariant_toFloat (DosQVariant *vptr);
DOS_API double DOS_CALL dos_qvariant_toDouble (DosQVariant *vptr);
DOS_API DosQObject *DOS_CALL dos_qvariant_toQObject(DosQVariant *vptr);
// QMetaObject
DOS_API DosQMetaObject *dos_qmetaobject_create(DosQMetaObject *superClassMetaObject,
DOS_API DosQMetaObject *DOS_CALL dos_qmetaobject_create(DosQMetaObject *superClassMetaObject,
const char *className,
const SignalDefinitions *signalDefinitions,
const SlotDefinitions *slotDefinitions,
const PropertyDefinitions *propertyDefinitions);
DOS_API void dos_qmetaobject_delete(DosQMetaObject *vptr);
DOS_API void DOS_CALL dos_qmetaobject_delete(DosQMetaObject *vptr);
// QAbstractListModel
DOS_API DosQMetaObject *dos_qabstractlistmodel_qmetaobject();
DOS_API DosQAbstractListModel *dos_qabstractlistmodel_create(void *callbackObject,
DOS_API DosQMetaObject *DOS_CALL dos_qabstractlistmodel_qmetaobject();
DOS_API DosQAbstractListModel *DOS_CALL dos_qabstractlistmodel_create(void *callbackObject,
DosQMetaObject *metaObject,
DObjectCallback dObjectCallback,
RowCountCallback rowCountCallback,
@ -100,66 +102,66 @@ DOS_API DosQAbstractListModel *dos_qabstractlistmodel_create(void *callbackObjec
RoleNamesCallback roleNamesCallback,
FlagsCallback flagsCallback,
HeaderDataCallback headerDataCallback);
DOS_API void dos_qabstractlistmodel_beginInsertRows(DosQAbstractListModel *vptr, DosQModelIndex *parent, int first, int last);
DOS_API void dos_qabstractlistmodel_endInsertRows (DosQAbstractListModel *vptr);
DOS_API void dos_qabstractlistmodel_beginRemoveRows(DosQAbstractListModel *vptr, DosQModelIndex *parent, int first, int last);
DOS_API void dos_qabstractlistmodel_endRemoveRows (DosQAbstractListModel *vptr);
DOS_API void dos_qabstractlistmodel_beginResetModel(DosQAbstractListModel *vptr);
DOS_API void dos_qabstractlistmodel_endResetModel (DosQAbstractListModel *vptr);
DOS_API void dos_qabstractlistmodel_dataChanged (DosQAbstractListModel *vptr, DosQModelIndex *topLeft, DosQModelIndex *bottomRight, int *rolesPtr, int rolesLength);
DOS_API void DOS_CALL dos_qabstractlistmodel_beginInsertRows(DosQAbstractListModel *vptr, DosQModelIndex *parent, int first, int last);
DOS_API void DOS_CALL dos_qabstractlistmodel_endInsertRows (DosQAbstractListModel *vptr);
DOS_API void DOS_CALL dos_qabstractlistmodel_beginRemoveRows(DosQAbstractListModel *vptr, DosQModelIndex *parent, int first, int last);
DOS_API void DOS_CALL dos_qabstractlistmodel_endRemoveRows (DosQAbstractListModel *vptr);
DOS_API void DOS_CALL dos_qabstractlistmodel_beginResetModel(DosQAbstractListModel *vptr);
DOS_API void DOS_CALL dos_qabstractlistmodel_endResetModel (DosQAbstractListModel *vptr);
DOS_API void DOS_CALL dos_qabstractlistmodel_dataChanged (DosQAbstractListModel *vptr, DosQModelIndex *topLeft, DosQModelIndex *bottomRight, int *rolesPtr, int rolesLength);
// QObject
DOS_API DosQMetaObject *dos_qobject_qmetaobject();
DOS_API DosQObject *dos_qobject_create(void *dObjectPointer,
DOS_API DosQMetaObject *DOS_CALL dos_qobject_qmetaobject();
DOS_API DosQObject *DOS_CALL dos_qobject_create(void *dObjectPointer,
DosQMetaObject *metaObject,
DObjectCallback dObjectCallback);
DOS_API void dos_qobject_signal_emit(DosQObject *vptr,
DOS_API void DOS_CALL dos_qobject_signal_emit(DosQObject *vptr,
const char *name,
int parametersCount,
void **parameters);
DOS_API bool dos_qobject_signal_connect(DosQObject *senderVPtr,
DOS_API bool DOS_CALL dos_qobject_signal_connect(DosQObject *senderVPtr,
const char *signal,
DosQObject *receiverVPtr,
const char *method,
int type);
DOS_API bool dos_qobject_signal_disconnect(DosQObject *senderVPtr,
DOS_API bool DOS_CALL dos_qobject_signal_disconnect(DosQObject *senderVPtr,
const char *signal,
DosQObject *receiverVPtr,
const char *method);
DOS_API char *dos_qobject_objectName(DosQObject *vptr);
DOS_API void dos_qobject_setObjectName(DosQObject *vptr, const char *name);
DOS_API void dos_qobject_delete(DosQObject *vptr);
DOS_API char *DOS_CALL dos_qobject_objectName(DosQObject *vptr);
DOS_API void DOS_CALL dos_qobject_setObjectName(DosQObject *vptr, const char *name);
DOS_API void DOS_CALL dos_qobject_delete(DosQObject *vptr);
// QModelIndex
DOS_API DosQModelIndex *dos_qmodelindex_create();
DOS_API DosQModelIndex *dos_qmodelindex_create_qmodelindex(DosQModelIndex *index);
DOS_API void dos_qmodelindex_delete (DosQModelIndex *vptr);
DOS_API int dos_qmodelindex_row (DosQModelIndex *vptr);
DOS_API int dos_qmodelindex_column (DosQModelIndex *vptr);
DOS_API bool dos_qmodelindex_isValid(DosQModelIndex *vptr);
DOS_API DosQVariant *dos_qmodelindex_data (DosQModelIndex *vptr, int role);
DOS_API DosQModelIndex *dos_qmodelindex_parent (DosQModelIndex *vptr);
DOS_API DosQModelIndex *dos_qmodelindex_child (DosQModelIndex *vptr, int row, int column);
DOS_API DosQModelIndex *dos_qmodelindex_sibling(DosQModelIndex *vptr, int row, int column);
DOS_API void dos_qmodelindex_assign (DosQModelIndex *l, DosQModelIndex *r);
DOS_API DosQModelIndex *DOS_CALL dos_qmodelindex_create();
DOS_API DosQModelIndex *DOS_CALL dos_qmodelindex_create_qmodelindex(DosQModelIndex *index);
DOS_API void DOS_CALL dos_qmodelindex_delete (DosQModelIndex *vptr);
DOS_API int DOS_CALL dos_qmodelindex_row (DosQModelIndex *vptr);
DOS_API int DOS_CALL dos_qmodelindex_column (DosQModelIndex *vptr);
DOS_API bool DOS_CALL dos_qmodelindex_isValid(DosQModelIndex *vptr);
DOS_API DosQVariant *DOS_CALL dos_qmodelindex_data (DosQModelIndex *vptr, int role);
DOS_API DosQModelIndex *DOS_CALL dos_qmodelindex_parent (DosQModelIndex *vptr);
DOS_API DosQModelIndex *DOS_CALL dos_qmodelindex_child (DosQModelIndex *vptr, int row, int column);
DOS_API DosQModelIndex *DOS_CALL dos_qmodelindex_sibling(DosQModelIndex *vptr, int row, int column);
DOS_API void DOS_CALL dos_qmodelindex_assign (DosQModelIndex *l, DosQModelIndex *r);
// QHash<int, QByteArray>
DOS_API DosQHashIntQByteArray *dos_qhash_int_qbytearray_create();
DOS_API void dos_qhash_int_qbytearray_delete(DosQHashIntQByteArray *vptr);
DOS_API void dos_qhash_int_qbytearray_insert(DosQHashIntQByteArray *vptr, int key, const char *value);
DOS_API char *dos_qhash_int_qbytearray_value (DosQHashIntQByteArray *vptr, int key);
DOS_API DosQHashIntQByteArray *DOS_CALL dos_qhash_int_qbytearray_create();
DOS_API void DOS_CALL dos_qhash_int_qbytearray_delete(DosQHashIntQByteArray *vptr);
DOS_API void DOS_CALL dos_qhash_int_qbytearray_insert(DosQHashIntQByteArray *vptr, int key, const char *value);
DOS_API char *DOS_CALL dos_qhash_int_qbytearray_value (DosQHashIntQByteArray *vptr, int key);
// QResource
DOS_API void dos_qresource_register(const char *filename);
DOS_API void DOS_CALL dos_qresource_register(const char *filename);
// QUrl
DOS_API DosQUrl *dos_qurl_create(const char *url, int parsingMode);
DOS_API void dos_qurl_delete(DosQUrl *vptr);
DOS_API char *dos_qurl_to_string(DosQUrl *vptr);
DOS_API DosQUrl *DOS_CALL dos_qurl_create(const char *url, int parsingMode);
DOS_API void DOS_CALL dos_qurl_delete(DosQUrl *vptr);
DOS_API char *DOS_CALL dos_qurl_to_string(DosQUrl *vptr);
// QDeclarative
DOS_API int dos_qdeclarative_qmlregistertype(const QmlRegisterType *qmlRegisterType);
DOS_API int dos_qdeclarative_qmlregistersingletontype(const QmlRegisterType *qmlRegisterType);
DOS_API int DOS_CALL dos_qdeclarative_qmlregistertype(const QmlRegisterType *qmlRegisterType);
DOS_API int DOS_CALL dos_qdeclarative_qmlregistersingletontype(const QmlRegisterType *qmlRegisterType);
#ifdef __cplusplus
}

View File

@ -1,6 +1,13 @@
#ifndef DOTHERSIDETYPES_H
#define DOTHERSIDETYPES_H
#ifdef WIN32
#define DOS_CALL __cdecl
#else
#define DOS_CALL
#endif
#ifdef __cplusplus
extern "C"
{
@ -19,17 +26,17 @@ typedef void DosQMetaObject;
typedef void DosQObject;
// Raw function types
typedef void(*Function)(void *);
typedef void(*DObjectCallback)(void *, void *, int, void **);
typedef void(*RowCountCallback) (DosQAbstractListModel *model, const DosQModelIndex *index, int *result);
typedef void(*ColumnCountCallback) (DosQAbstractListModel *model, const DosQModelIndex *index, int *result);
typedef void(*DataCallback) (DosQAbstractListModel *model, const DosQModelIndex *index, int role, DosQVariant *result);
typedef void(*SetDataCallback) (DosQAbstractListModel *model, const DosQModelIndex *index, const DosQVariant *value, int role, bool *result);
typedef void(*RoleNamesCallback) (DosQAbstractListModel *model, DosQHashIntQByteArray *result);
typedef void(*FlagsCallback) (DosQAbstractListModel *model, const DosQModelIndex *index, int *result);
typedef void(*HeaderDataCallback) (DosQAbstractListModel *model, int section, int orientation, int role, DosQVariant *result);
typedef void(*CreateDObject)(int, void *, void **, void **);
typedef void(*DeleteDObject)(int, void *);
typedef void (DOS_CALL *Function)(void *);
typedef void (DOS_CALL *DObjectCallback)(void *, void *, int, void **);
typedef void (DOS_CALL *RowCountCallback) (DosQAbstractListModel *model, const DosQModelIndex *index, int *result);
typedef void (DOS_CALL *ColumnCountCallback) (DosQAbstractListModel *model, const DosQModelIndex *index, int *result);
typedef void (DOS_CALL *DataCallback) (DosQAbstractListModel *model, const DosQModelIndex *index, int role, DosQVariant *result);
typedef void (DOS_CALL *SetDataCallback) (DosQAbstractListModel *model, const DosQModelIndex *index, const DosQVariant *value, int role, bool *result);
typedef void (DOS_CALL *RoleNamesCallback) (DosQAbstractListModel *model, DosQHashIntQByteArray *result);
typedef void (DOS_CALL *FlagsCallback) (DosQAbstractListModel *model, const DosQModelIndex *index, int *result);
typedef void (DOS_CALL *HeaderDataCallback) (DosQAbstractListModel *model, int section, int orientation, int role, DosQVariant *result);
typedef void (DOS_CALL *CreateDObject)(int, void *, void **, void **);
typedef void (DOS_CALL *DeleteDObject)(int, void *);
struct QmlRegisterType {
int major;

View File

@ -7,7 +7,7 @@
namespace {
QList<QByteArray> createParameterNames(const DOS::SignalDefinition& signal)
QList<QByteArray> createParameterNames(const DOS::SignalDefinition &signal)
{
QList<QByteArray> result;
size_t size = signal.parameterTypes.size();

View File

@ -27,7 +27,7 @@ bool DosQObjectImpl::emitSignal(QObject *emitter, const QString &name, const std
std::vector<void *> arguments(args.size() + 1, nullptr); // +1 for the result at pos 0
for (size_t i = 0; i < args.size(); ++i)
arguments[i+1] = const_cast<void*>(args[i].constData()); // Extract inner void*
arguments[i + 1] = const_cast<void *>(args[i].constData()); // Extract inner void*
QMetaObject::activate(emitter, method.methodIndex(), arguments.data());
return true;
}