/* * DO NOT EDIT! This is a generated file. * * Header file which provides C declarations for VirtualBox Main API * (COM interfaces), generated from XIDL (XML interface definition). * On Windows (which uses COM instead of XPCOM) the native C support * is used, and most of this file is not used. * * Source : src/VBox/Main/idl/VirtualBox.xidl * Generator : src/VBox/Main/cbinding/capiidl.xsl * * This file contains portions from the following Mozilla XPCOM files: * xpcom/include/xpcom/nsID.h * xpcom/include/nsIException.h * xpcom/include/nsprpub/prtypes.h * xpcom/include/xpcom/nsISupportsBase.h * * These files were originally triple-licensed (MPL/GPL2/LGPL2.1). Oracle * elects to distribute this derived work under the LGPL2.1 only. */ /* * Copyright (C) 2008-2020 Oracle Corporation * * This file is part of a free software library; you can redistribute * it and/or modify it under the terms of the GNU Lesser General * Public License version 2.1 as published by the Free Software * Foundation and shipped in the "COPYING" file with this library. * The library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY of any kind. * * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if * any license choice other than GPL or LGPL is available it will * apply instead, Oracle elects to use only the Lesser General Public * License version 2.1 (LGPLv2) at this time for any software where * a choice of LGPL license versions is made available with the * language indicating that LGPLv2 or any later version may be used, * or where a choice of which version of the LGPL is applied is * otherwise unspecified. */ #ifndef ___VirtualBox_CAPI_h #define ___VirtualBox_CAPI_h #ifdef _WIN32 # ifdef _MSC_VER # pragma warning(push) # pragma warning(disable:4668 4255) /* -Wall and windows.h */ # if _MSC_VER >= 1800 /*RT_MSC_VER_VC120*/ # pragma warning(disable:4005) /* sdk/v7.1/include/sal_supp.h(57) : warning C4005: '__useHeader' : macro redefinition */ # endif # ifdef __cplusplus # if _MSC_VER >= 1900 /*RT_MSC_VER_VC140*/ # pragma warning(disable:5039) /* winbase.h(13179): warning C5039: 'TpSetCallbackCleanupGroup': pointer or reference to potentially throwing function passed to 'extern "C"' function under -EHc. Undefined behavior may occur if this function throws an exception. */ # endif # endif # endif # undef COBJMACROS # define COBJMACROS # include "Windows.h" # pragma warning(pop) #endif /* _WIN32 */ #ifdef WIN32 # ifdef IN_VBOXCAPI # define VBOXCAPI_DECL(type) extern __declspec(dllexport) type # else /* !IN_VBOXCAPI */ # define VBOXCAPI_DECL(type) __declspec(dllimport) type # endif /* !IN_VBOXCAPI */ #endif /* WIN32 */ #ifdef __cplusplus /* The C++ treatment in this file is not meant for SDK users, it only exists * so that this file can be used to produce the VBoxCAPI shared library which * has to use C++ as it does all the conversion magic. */ # ifdef IN_VBOXCAPI # include "VBox/com/VirtualBox.h" # ifndef WIN32 # include "nsIEventQueue.h" # endif /* !WIN32 */ # else /* !IN_VBOXCAPI */ # error Do not include this header file from C++ code # endif /* !IN_VBOXCAPI */ #endif /* __cplusplus */ #ifdef __GNUC__ # define VBOX_EXTERN_CONST(type, name) extern const type name __attribute__((nocommon)) #else /* !__GNUC__ */ # define VBOX_EXTERN_CONST(type, name) extern const type name #endif /* !__GNUC__ */ /* Treat WIN32 completely separately, as on Windows VirtualBox uses COM, not * XPCOM like on all other platforms. While the code below would also compile * on Windows, we need to switch to the native C support provided by the header * files produced by the COM IDL compiler. */ #ifdef WIN32 # include "ObjBase.h" # include "oaidl.h" # include "VirtualBox.h" #ifndef __cplusplus /* Skip this in the C++ case as there's already a definition for CBSTR. */ typedef const BSTR CBSTR; #endif /* !__cplusplus */ #define VBOX_WINAPI WINAPI #define ComSafeArrayAsInParam(f) (f) #define ComSafeArrayAsOutParam(f) (&(f)) #define ComSafeArrayAsOutTypeParam(f,t) (&(f)) #define ComSafeArrayAsOutIfaceParam(f,t) (&(f)) #else /* !WIN32 */ #include <stddef.h> #include "wchar.h" #ifdef IN_VBOXCAPI # define VBOXCAPI_DECL(type) PR_EXPORT(type) #else /* !IN_VBOXCAPI */ # define VBOXCAPI_DECL(type) PR_IMPORT(type) #endif /* !IN_VBOXCAPI */ #ifndef __cplusplus #if defined(WIN32) #define PR_EXPORT(__type) extern __declspec(dllexport) __type #define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type #define PR_IMPORT(__type) __declspec(dllimport) __type #define PR_IMPORT_DATA(__type) __declspec(dllimport) __type #define PR_EXTERN(__type) extern __declspec(dllexport) __type #define PR_IMPLEMENT(__type) __declspec(dllexport) __type #define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type #define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type #define PR_CALLBACK #define PR_CALLBACK_DECL #define PR_STATIC_CALLBACK(__x) static __x #elif defined(XP_BEOS) #define PR_EXPORT(__type) extern __declspec(dllexport) __type #define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type #define PR_IMPORT(__type) extern __declspec(dllexport) __type #define PR_IMPORT_DATA(__type) extern __declspec(dllexport) __type #define PR_EXTERN(__type) extern __declspec(dllexport) __type #define PR_IMPLEMENT(__type) __declspec(dllexport) __type #define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type #define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type #define PR_CALLBACK #define PR_CALLBACK_DECL #define PR_STATIC_CALLBACK(__x) static __x #elif defined(WIN16) #define PR_CALLBACK_DECL __cdecl #if defined(_WINDLL) #define PR_EXPORT(__type) extern __type _cdecl _export _loadds #define PR_IMPORT(__type) extern __type _cdecl _export _loadds #define PR_EXPORT_DATA(__type) extern __type _export #define PR_IMPORT_DATA(__type) extern __type _export #define PR_EXTERN(__type) extern __type _cdecl _export _loadds #define PR_IMPLEMENT(__type) __type _cdecl _export _loadds #define PR_EXTERN_DATA(__type) extern __type _export #define PR_IMPLEMENT_DATA(__type) __type _export #define PR_CALLBACK __cdecl __loadds #define PR_STATIC_CALLBACK(__x) static __x PR_CALLBACK #else /* this must be .EXE */ #define PR_EXPORT(__type) extern __type _cdecl _export #define PR_IMPORT(__type) extern __type _cdecl _export #define PR_EXPORT_DATA(__type) extern __type _export #define PR_IMPORT_DATA(__type) extern __type _export #define PR_EXTERN(__type) extern __type _cdecl _export #define PR_IMPLEMENT(__type) __type _cdecl _export #define PR_EXTERN_DATA(__type) extern __type _export #define PR_IMPLEMENT_DATA(__type) __type _export #define PR_CALLBACK __cdecl __loadds #define PR_STATIC_CALLBACK(__x) __x PR_CALLBACK #endif /* _WINDLL */ #elif defined(XP_MAC) #define PR_EXPORT(__type) extern __declspec(export) __type #define PR_EXPORT_DATA(__type) extern __declspec(export) __type #define PR_IMPORT(__type) extern __declspec(export) __type #define PR_IMPORT_DATA(__type) extern __declspec(export) __type #define PR_EXTERN(__type) extern __declspec(export) __type #define PR_IMPLEMENT(__type) __declspec(export) __type #define PR_EXTERN_DATA(__type) extern __declspec(export) __type #define PR_IMPLEMENT_DATA(__type) __declspec(export) __type #define PR_CALLBACK #define PR_CALLBACK_DECL #define PR_STATIC_CALLBACK(__x) static __x #elif defined(XP_OS2) && defined(__declspec) #define PR_EXPORT(__type) extern __declspec(dllexport) __type #define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type #define PR_IMPORT(__type) __declspec(dllimport) __type #define PR_IMPORT_DATA(__type) __declspec(dllimport) __type #define PR_EXTERN(__type) extern __declspec(dllexport) __type #define PR_IMPLEMENT(__type) __declspec(dllexport) __type #define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type #define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type #define PR_CALLBACK #define PR_CALLBACK_DECL #define PR_STATIC_CALLBACK(__x) static __x #elif defined(XP_OS2_VACPP) #define PR_EXPORT(__type) extern __type #define PR_EXPORT_DATA(__type) extern __type #define PR_IMPORT(__type) extern __type #define PR_IMPORT_DATA(__type) extern __type #define PR_EXTERN(__type) extern __type #define PR_IMPLEMENT(__type) __type #define PR_EXTERN_DATA(__type) extern __type #define PR_IMPLEMENT_DATA(__type) __type #define PR_CALLBACK _Optlink #define PR_CALLBACK_DECL #define PR_STATIC_CALLBACK(__x) static __x PR_CALLBACK #else /* Unix */ # ifdef VBOX_HAVE_VISIBILITY_HIDDEN # define PR_EXPORT(__type) __attribute__((visibility("default"))) extern __type # define PR_EXPORT_DATA(__type) __attribute__((visibility("default"))) extern __type # define PR_IMPORT(__type) extern __type # define PR_IMPORT_DATA(__type) extern __type # define PR_EXTERN(__type) __attribute__((visibility("default"))) extern __type # define PR_IMPLEMENT(__type) __attribute__((visibility("default"))) __type # define PR_EXTERN_DATA(__type) __attribute__((visibility("default"))) extern __type # define PR_IMPLEMENT_DATA(__type) __attribute__((visibility("default"))) __type # define PR_CALLBACK # define PR_CALLBACK_DECL # define PR_STATIC_CALLBACK(__x) static __x # else # define PR_EXPORT(__type) extern __type # define PR_EXPORT_DATA(__type) extern __type # define PR_IMPORT(__type) extern __type # define PR_IMPORT_DATA(__type) extern __type # define PR_EXTERN(__type) extern __type # define PR_IMPLEMENT(__type) __type # define PR_EXTERN_DATA(__type) extern __type # define PR_IMPLEMENT_DATA(__type) __type # define PR_CALLBACK # define PR_CALLBACK_DECL # define PR_STATIC_CALLBACK(__x) static __x # endif #endif #if defined(_NSPR_BUILD_) #define NSPR_API(__type) PR_EXPORT(__type) #define NSPR_DATA_API(__type) PR_EXPORT_DATA(__type) #else #define NSPR_API(__type) PR_IMPORT(__type) #define NSPR_DATA_API(__type) PR_IMPORT_DATA(__type) #endif typedef unsigned char PRUint8; #if (defined(HPUX) && defined(__cplusplus) \ && !defined(__GNUC__) && __cplusplus < 199707L) \ || (defined(SCO) && defined(__cplusplus) \ && !defined(__GNUC__) && __cplusplus == 1L) typedef char PRInt8; #else typedef signed char PRInt8; #endif #define PR_INT8_MAX 127 #define PR_INT8_MIN (-128) #define PR_UINT8_MAX 255U typedef unsigned short PRUint16; typedef short PRInt16; #define PR_INT16_MAX 32767 #define PR_INT16_MIN (-32768) #define PR_UINT16_MAX 65535U typedef unsigned int PRUint32; typedef int PRInt32; #define PR_INT32(x) x #define PR_UINT32(x) x ## U #define PR_INT32_MAX PR_INT32(2147483647) #define PR_INT32_MIN (-PR_INT32_MAX - 1) #define PR_UINT32_MAX PR_UINT32(4294967295) typedef long PRInt64; typedef unsigned long PRUint64; typedef int PRIntn; typedef unsigned int PRUintn; typedef double PRFloat64; typedef size_t PRSize; typedef ptrdiff_t PRPtrdiff; typedef unsigned long PRUptrdiff; typedef PRIntn PRBool; #define PR_TRUE 1 #define PR_FALSE 0 typedef PRUint8 PRPackedBool; /* ** Status code used by some routines that have a single point of failure or ** special status return. */ typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus; #ifndef __PRUNICHAR__ #define __PRUNICHAR__ #if defined(WIN32) || defined(XP_MAC) typedef wchar_t PRUnichar; #else typedef PRUint16 PRUnichar; #endif typedef PRUnichar *BSTR; typedef const PRUnichar *CBSTR; #endif typedef long PRWord; typedef unsigned long PRUword; #define nsnull 0 typedef PRUint32 nsresult; #if defined(__GNUC__) && (__GNUC__ > 2) #define NS_LIKELY(x) (__builtin_expect((x), 1)) #define NS_UNLIKELY(x) (__builtin_expect((x), 0)) #else #define NS_LIKELY(x) (x) #define NS_UNLIKELY(x) (x) #endif #define NS_FAILED(_nsresult) (NS_UNLIKELY((_nsresult) & 0x80000000)) #define NS_SUCCEEDED(_nsresult) (NS_LIKELY(!((_nsresult) & 0x80000000))) #ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP # define PR_IntervalNow VBoxNsprPR_IntervalNow # define PR_TicksPerSecond VBoxNsprPR_TicksPerSecond # define PR_SecondsToInterval VBoxNsprPR_SecondsToInterval # define PR_MillisecondsToInterval VBoxNsprPR_MillisecondsToInterval # define PR_MicrosecondsToInterval VBoxNsprPR_MicrosecondsToInterval # define PR_IntervalToSeconds VBoxNsprPR_IntervalToSeconds # define PR_IntervalToMilliseconds VBoxNsprPR_IntervalToMilliseconds # define PR_IntervalToMicroseconds VBoxNsprPR_IntervalToMicroseconds # define PR_EnterMonitor VBoxNsprPR_EnterMonitor # define PR_ExitMonitor VBoxNsprPR_ExitMonitor # define PR_Notify VBoxNsprPR_Notify # define PR_NotifyAll VBoxNsprPR_NotifyAll # define PR_Wait VBoxNsprPR_Wait # define PR_NewMonitor VBoxNsprPR_NewMonitor # define PR_DestroyMonitor VBoxNsprPR_DestroyMonitor #endif /* VBOX_WITH_XPCOM_NAMESPACE_CLEANUP */ typedef PRUint32 PRIntervalTime; #define PR_INTERVAL_MIN 1000UL #define PR_INTERVAL_MAX 100000UL #define PR_INTERVAL_NO_WAIT 0UL #define PR_INTERVAL_NO_TIMEOUT 0xffffffffUL NSPR_API(PRIntervalTime) PR_IntervalNow(void); NSPR_API(PRUint32) PR_TicksPerSecond(void); NSPR_API(PRIntervalTime) PR_SecondsToInterval(PRUint32 seconds); NSPR_API(PRIntervalTime) PR_MillisecondsToInterval(PRUint32 milli); NSPR_API(PRIntervalTime) PR_MicrosecondsToInterval(PRUint32 micro); NSPR_API(PRUint32) PR_IntervalToSeconds(PRIntervalTime ticks); NSPR_API(PRUint32) PR_IntervalToMilliseconds(PRIntervalTime ticks); NSPR_API(PRUint32) PR_IntervalToMicroseconds(PRIntervalTime ticks); typedef struct PRMonitor PRMonitor; NSPR_API(PRMonitor*) PR_NewMonitor(void); NSPR_API(void) PR_DestroyMonitor(PRMonitor *mon); NSPR_API(void) PR_EnterMonitor(PRMonitor *mon); NSPR_API(PRStatus) PR_ExitMonitor(PRMonitor *mon); NSPR_API(PRStatus) PR_Wait(PRMonitor *mon, PRIntervalTime ticks); NSPR_API(PRStatus) PR_Notify(PRMonitor *mon); NSPR_API(PRStatus) PR_NotifyAll(PRMonitor *mon); #ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP # define PR_CreateThread VBoxNsprPR_CreateThread # define PR_JoinThread VBoxNsprPR_JoinThread # define PR_Sleep VBoxNsprPR_Sleep # define PR_GetCurrentThread VBoxNsprPR_GetCurrentThread # define PR_GetThreadState VBoxNsprPR_GetThreadState # define PR_SetThreadPrivate VBoxNsprPR_SetThreadPrivate # define PR_GetThreadPrivate VBoxNsprPR_GetThreadPrivate # define PR_NewThreadPrivateIndex VBoxNsprPR_NewThreadPrivateIndex # define PR_GetThreadPriority VBoxNsprPR_GetThreadPriority # define PR_SetThreadPriority VBoxNsprPR_SetThreadPriority # define PR_Interrupt VBoxNsprPR_Interrupt # define PR_ClearInterrupt VBoxNsprPR_ClearInterrupt # define PR_BlockInterrupt VBoxNsprPR_BlockInterrupt # define PR_UnblockInterrupt VBoxNsprPR_UnblockInterrupt # define PR_GetThreadScope VBoxNsprPR_GetThreadScope # define PR_GetThreadType VBoxNsprPR_GetThreadType #endif /* VBOX_WITH_XPCOM_NAMESPACE_CLEANUP */ typedef struct PRThread PRThread; typedef struct PRThreadStack PRThreadStack; typedef enum PRThreadType { PR_USER_THREAD, PR_SYSTEM_THREAD } PRThreadType; typedef enum PRThreadScope { PR_LOCAL_THREAD, PR_GLOBAL_THREAD, PR_GLOBAL_BOUND_THREAD } PRThreadScope; typedef enum PRThreadState { PR_JOINABLE_THREAD, PR_UNJOINABLE_THREAD } PRThreadState; typedef enum PRThreadPriority { PR_PRIORITY_FIRST = 0, /* just a placeholder */ PR_PRIORITY_LOW = 0, /* the lowest possible priority */ PR_PRIORITY_NORMAL = 1, /* most common expected priority */ PR_PRIORITY_HIGH = 2, /* slightly more aggressive scheduling */ PR_PRIORITY_URGENT = 3, /* it does little good to have more than one */ PR_PRIORITY_LAST = 3 /* this is just a placeholder */ } PRThreadPriority; NSPR_API(PRThread*) PR_CreateThread(PRThreadType type, void (PR_CALLBACK *start)(void *arg), void *arg, PRThreadPriority priority, PRThreadScope scope, PRThreadState state, PRUint32 stackSize); NSPR_API(PRStatus) PR_JoinThread(PRThread *thread); NSPR_API(PRThread*) PR_GetCurrentThread(void); #ifndef NO_NSPR_10_SUPPORT #define PR_CurrentThread() PR_GetCurrentThread() /* for nspr1.0 compat. */ #endif /* NO_NSPR_10_SUPPORT */ NSPR_API(PRThreadPriority) PR_GetThreadPriority(const PRThread *thread); NSPR_API(void) PR_SetThreadPriority(PRThread *thread, PRThreadPriority priority); typedef void (PR_CALLBACK *PRThreadPrivateDTOR)(void *priv); NSPR_API(PRStatus) PR_NewThreadPrivateIndex( PRUintn *newIndex, PRThreadPrivateDTOR destructor); NSPR_API(PRStatus) PR_SetThreadPrivate(PRUintn tpdIndex, void *priv); NSPR_API(void*) PR_GetThreadPrivate(PRUintn tpdIndex); NSPR_API(PRStatus) PR_Interrupt(PRThread *thread); NSPR_API(void) PR_ClearInterrupt(void); NSPR_API(void) PR_BlockInterrupt(void); NSPR_API(void) PR_UnblockInterrupt(void); NSPR_API(PRStatus) PR_Sleep(PRIntervalTime ticks); NSPR_API(PRThreadScope) PR_GetThreadScope(const PRThread *thread); NSPR_API(PRThreadType) PR_GetThreadType(const PRThread *thread); NSPR_API(PRThreadState) PR_GetThreadState(const PRThread *thread); #ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP # define PR_DestroyLock VBoxNsprPR_DestroyLock # define PR_Lock VBoxNsprPR_Lock # define PR_NewLock VBoxNsprPR_NewLock # define PR_Unlock VBoxNsprPR_Unlock #endif /* VBOX_WITH_XPCOM_NAMESPACE_CLEANUP */ typedef struct PRLock PRLock; NSPR_API(PRLock*) PR_NewLock(void); NSPR_API(void) PR_DestroyLock(PRLock *lock); NSPR_API(void) PR_Lock(PRLock *lock); NSPR_API(PRStatus) PR_Unlock(PRLock *lock); #ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP # define PR_NewCondVar VBoxNsprPR_NewCondVar # define PR_DestroyCondVar VBoxNsprPR_DestroyCondVar # define PR_WaitCondVar VBoxNsprPR_WaitCondVar # define PR_NotifyCondVar VBoxNsprPR_NotifyCondVar # define PR_NotifyAllCondVar VBoxNsprPR_NotifyAllCondVar #endif /* VBOX_WITH_XPCOM_NAMESPACE_CLEANUP */ typedef struct PRCondVar PRCondVar; NSPR_API(PRCondVar*) PR_NewCondVar(PRLock *lock); NSPR_API(void) PR_DestroyCondVar(PRCondVar *cvar); NSPR_API(PRStatus) PR_WaitCondVar(PRCondVar *cvar, PRIntervalTime timeout); NSPR_API(PRStatus) PR_NotifyCondVar(PRCondVar *cvar); NSPR_API(PRStatus) PR_NotifyAllCondVar(PRCondVar *cvar); typedef struct PRCListStr PRCList; struct PRCListStr { PRCList *next; PRCList *prev; }; #ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP # define PL_DestroyEvent VBoxNsplPL_DestroyEvent # define PL_HandleEvent VBoxNsplPL_HandleEvent # define PL_InitEvent VBoxNsplPL_InitEvent # define PL_CreateEventQueue VBoxNsplPL_CreateEventQueue # define PL_CreateMonitoredEventQueue VBoxNsplPL_CreateMonitoredEventQueue # define PL_CreateNativeEventQueue VBoxNsplPL_CreateNativeEventQueue # define PL_DequeueEvent VBoxNsplPL_DequeueEvent # define PL_DestroyEventQueue VBoxNsplPL_DestroyEventQueue # define PL_EventAvailable VBoxNsplPL_EventAvailable # define PL_EventLoop VBoxNsplPL_EventLoop # define PL_GetEvent VBoxNsplPL_GetEvent # define PL_GetEventOwner VBoxNsplPL_GetEventOwner # define PL_GetEventQueueMonitor VBoxNsplPL_GetEventQueueMonitor # define PL_GetEventQueueSelectFD VBoxNsplPL_GetEventQueueSelectFD # define PL_MapEvents VBoxNsplPL_MapEvents # define PL_PostEvent VBoxNsplPL_PostEvent # define PL_PostSynchronousEvent VBoxNsplPL_PostSynchronousEvent # define PL_ProcessEventsBeforeID VBoxNsplPL_ProcessEventsBeforeID # define PL_ProcessPendingEvents VBoxNsplPL_ProcessPendingEvents # define PL_RegisterEventIDFunc VBoxNsplPL_RegisterEventIDFunc # define PL_RevokeEvents VBoxNsplPL_RevokeEvents # define PL_UnregisterEventIDFunc VBoxNsplPL_UnregisterEventIDFunc # define PL_WaitForEvent VBoxNsplPL_WaitForEvent # define PL_IsQueueNative VBoxNsplPL_IsQueueNative # define PL_IsQueueOnCurrentThread VBoxNsplPL_IsQueueOnCurrentThread # define PL_FavorPerformanceHint VBoxNsplPL_FavorPerformanceHint #endif /* VBOX_WITH_XPCOM_NAMESPACE_CLEANUP */ typedef struct PLEvent PLEvent; typedef struct PLEventQueue PLEventQueue; PR_EXTERN(PLEventQueue*) PL_CreateEventQueue(const char* name, PRThread* handlerThread); PR_EXTERN(PLEventQueue *) PL_CreateNativeEventQueue( const char *name, PRThread *handlerThread ); PR_EXTERN(PLEventQueue *) PL_CreateMonitoredEventQueue( const char *name, PRThread *handlerThread ); PR_EXTERN(void) PL_DestroyEventQueue(PLEventQueue* self); PR_EXTERN(PRMonitor*) PL_GetEventQueueMonitor(PLEventQueue* self); #define PL_ENTER_EVENT_QUEUE_MONITOR(queue) \ PR_EnterMonitor(PL_GetEventQueueMonitor(queue)) #define PL_EXIT_EVENT_QUEUE_MONITOR(queue) \ PR_ExitMonitor(PL_GetEventQueueMonitor(queue)) PR_EXTERN(PRStatus) PL_PostEvent(PLEventQueue* self, PLEvent* event); PR_EXTERN(void*) PL_PostSynchronousEvent(PLEventQueue* self, PLEvent* event); PR_EXTERN(PLEvent*) PL_GetEvent(PLEventQueue* self); PR_EXTERN(PRBool) PL_EventAvailable(PLEventQueue* self); typedef void (PR_CALLBACK *PLEventFunProc)(PLEvent* event, void* data, PLEventQueue* queue); PR_EXTERN(void) PL_MapEvents(PLEventQueue* self, PLEventFunProc fun, void* data); PR_EXTERN(void) PL_RevokeEvents(PLEventQueue* self, void* owner); PR_EXTERN(void) PL_ProcessPendingEvents(PLEventQueue* self); PR_EXTERN(PLEvent*) PL_WaitForEvent(PLEventQueue* self); PR_EXTERN(void) PL_EventLoop(PLEventQueue* self); PR_EXTERN(PRInt32) PL_GetEventQueueSelectFD(PLEventQueue* self); PR_EXTERN(PRBool) PL_IsQueueOnCurrentThread( PLEventQueue *queue ); PR_EXTERN(PRBool) PL_IsQueueNative(PLEventQueue *queue); typedef void* (PR_CALLBACK *PLHandleEventProc)(PLEvent* self); typedef void (PR_CALLBACK *PLDestroyEventProc)(PLEvent* self); PR_EXTERN(void) PL_InitEvent(PLEvent* self, void* owner, PLHandleEventProc handler, PLDestroyEventProc destructor); PR_EXTERN(void*) PL_GetEventOwner(PLEvent* self); PR_EXTERN(void) PL_HandleEvent(PLEvent* self); PR_EXTERN(void) PL_DestroyEvent(PLEvent* self); PR_EXTERN(void) PL_DequeueEvent(PLEvent* self, PLEventQueue* queue); PR_EXTERN(void) PL_FavorPerformanceHint(PRBool favorPerformanceOverEventStarvation, PRUint32 starvationDelay); struct PLEvent { PRCList link; PLHandleEventProc handler; PLDestroyEventProc destructor; void* owner; void* synchronousResult; PRLock* lock; PRCondVar* condVar; PRBool handled; #ifdef PL_POST_TIMINGS PRIntervalTime postTime; #endif #ifdef XP_UNIX unsigned long id; #endif /* XP_UNIX */ /* other fields follow... */ }; #if defined(XP_WIN) || defined(XP_OS2) PR_EXTERN(HWND) PL_GetNativeEventReceiverWindow( PLEventQueue *eqp ); #endif /* XP_WIN || XP_OS2 */ #ifdef XP_UNIX PR_EXTERN(PRInt32) PL_ProcessEventsBeforeID(PLEventQueue *aSelf, unsigned long aID); typedef unsigned long (PR_CALLBACK *PLGetEventIDFunc)(void *aClosure); PR_EXTERN(void) PL_RegisterEventIDFunc(PLEventQueue *aSelf, PLGetEventIDFunc aFunc, void *aClosure); PR_EXTERN(void) PL_UnregisterEventIDFunc(PLEventQueue *aSelf); #endif /* XP_UNIX */ /* Standard "it worked" return value */ #define NS_OK 0 #define NS_ERROR_BASE ((nsresult) 0xC1F30000) /* Returned when an instance is not initialized */ #define NS_ERROR_NOT_INITIALIZED (NS_ERROR_BASE + 1) /* Returned when an instance is already initialized */ #define NS_ERROR_ALREADY_INITIALIZED (NS_ERROR_BASE + 2) /* Returned by a not implemented function */ #define NS_ERROR_NOT_IMPLEMENTED ((nsresult) 0x80004001L) /* Returned when a given interface is not supported. */ #define NS_NOINTERFACE ((nsresult) 0x80004002L) #define NS_ERROR_NO_INTERFACE NS_NOINTERFACE #define NS_ERROR_INVALID_POINTER ((nsresult) 0x80004003L) #define NS_ERROR_NULL_POINTER NS_ERROR_INVALID_POINTER /* Returned when a function aborts */ #define NS_ERROR_ABORT ((nsresult) 0x80004004L) /* Returned when a function fails */ #define NS_ERROR_FAILURE ((nsresult) 0x80004005L) /* Returned when an unexpected error occurs */ #define NS_ERROR_UNEXPECTED ((nsresult) 0x8000ffffL) /* Returned when a memory allocation fails */ #define NS_ERROR_OUT_OF_MEMORY ((nsresult) 0x8007000eL) /* Returned when an illegal value is passed */ #define NS_ERROR_ILLEGAL_VALUE ((nsresult) 0x80070057L) #define NS_ERROR_INVALID_ARG NS_ERROR_ILLEGAL_VALUE /* Returned when a class doesn't allow aggregation */ #define NS_ERROR_NO_AGGREGATION ((nsresult) 0x80040110L) /* Returned when an operation can't complete due to an unavailable resource */ #define NS_ERROR_NOT_AVAILABLE ((nsresult) 0x80040111L) /* Returned when a class is not registered */ #define NS_ERROR_FACTORY_NOT_REGISTERED ((nsresult) 0x80040154L) /* Returned when a class cannot be registered, but may be tried again later */ #define NS_ERROR_FACTORY_REGISTER_AGAIN ((nsresult) 0x80040155L) /* Returned when a dynamically loaded factory couldn't be found */ #define NS_ERROR_FACTORY_NOT_LOADED ((nsresult) 0x800401f8L) /* Returned when a factory doesn't support signatures */ #define NS_ERROR_FACTORY_NO_SIGNATURE_SUPPORT \ (NS_ERROR_BASE + 0x101) /* Returned when a factory already is registered */ #define NS_ERROR_FACTORY_EXISTS (NS_ERROR_BASE + 0x100) /** * An "interface id" which can be used to uniquely identify a given * interface. * A "unique identifier". This is modeled after OSF DCE UUIDs. */ struct nsID { PRUint32 m0; PRUint16 m1; PRUint16 m2; PRUint8 m3[8]; }; typedef struct nsID nsID; typedef nsID nsIID; typedef nsID nsCID; #endif /* __cplusplus */ #define VBOX_WINAPI /* Various COM types defined by their XPCOM equivalent */ typedef PRInt64 LONG64; typedef PRInt32 LONG; typedef PRInt32 DWORD; typedef PRInt16 SHORT; typedef PRUint64 ULONG64; typedef PRUint32 ULONG; typedef PRUint16 USHORT; typedef PRBool BOOL; #ifndef FALSE #define FALSE 0 #define TRUE 1 #endif #define HRESULT nsresult #define SUCCEEDED NS_SUCCEEDED #define FAILED NS_FAILED /* OLE error codes */ #define S_OK ((nsresult)NS_OK) #define E_UNEXPECTED NS_ERROR_UNEXPECTED #define E_NOTIMPL NS_ERROR_NOT_IMPLEMENTED #define E_OUTOFMEMORY NS_ERROR_OUT_OF_MEMORY #define E_INVALIDARG NS_ERROR_INVALID_ARG #define E_NOINTERFACE NS_ERROR_NO_INTERFACE #define E_POINTER NS_ERROR_NULL_POINTER #define E_ABORT NS_ERROR_ABORT #define E_FAIL NS_ERROR_FAILURE /* Note: a better analog for E_ACCESSDENIED would probably be * NS_ERROR_NOT_AVAILABLE, but we want binary compatibility for now. */ #define E_ACCESSDENIED ((nsresult)0x80070005L) /* Basic vartype for COM compatibility. */ typedef enum VARTYPE { VT_I2 = 2, VT_I4 = 3, VT_BSTR = 8, VT_DISPATCH = 9, VT_BOOL = 11, VT_UNKNOWN = 13, VT_I1 = 16, VT_UI1 = 17, VT_UI2 = 18, VT_UI4 = 19, VT_I8 = 20, VT_UI8 = 21, VT_HRESULT = 25 } VARTYPE; /* Basic safearray type for COM compatibility. */ typedef struct SAFEARRAY { void *pv; ULONG c; } SAFEARRAY; #define ComSafeArrayAsInParam(f) ((f) ? (f)->c : 0), ((f) ? (f)->pv : NULL) #define ComSafeArrayAsOutParam(f) (&((f)->c)), (&((f)->pv)) #define ComSafeArrayAsOutTypeParam(f,t) (&((f)->c)), (t**)(&((f)->pv)) #define ComSafeArrayAsOutIfaceParam(f,t) (&((f)->c)), (t**)(&((f)->pv)) /* Glossing over differences between COM and XPCOM */ #define IErrorInfo nsIException #define IUnknown nsISupports #define IDispatch nsISupports /* Make things as COM compatible as possible */ #define interface struct #ifdef CONST_VTABLE # define CONST_VTBL const #else /* !CONST_VTABLE */ # define CONST_VTBL #endif /* !CONST_VTABLE */ #ifndef __cplusplus /** @todo this first batch of forward declarations (and the corresponding ones * generated for each interface) are 100% redundant, remove eventually. */ interface nsISupports; /* forward declaration */ interface nsIException; /* forward declaration */ interface nsIStackFrame; /* forward declaration */ interface nsIEventTarget;/* forward declaration */ interface nsIEventQueue; /* forward declaration */ typedef interface nsISupports nsISupports; /* forward declaration */ typedef interface nsIException nsIException; /* forward declaration */ typedef interface nsIStackFrame nsIStackFrame; /* forward declaration */ typedef interface nsIEventTarget nsIEventTarget;/* forward declaration */ typedef interface nsIEventQueue nsIEventQueue; /* forward declaration */ /* starting interface: nsISupports */ #define NS_ISUPPORTS_IID_STR "00000000-0000-0000-c000-000000000046" #define NS_ISUPPORTS_IID \ { 0x00000000, 0x0000, 0x0000, \ {0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46} } /** * Reference count values * * This is the return type for AddRef() and Release() in nsISupports. * IUnknown of COM returns an unsigned long from equivalent functions. * The following ifdef exists to maintain binary compatibility with * IUnknown. */ #if defined(XP_WIN) && PR_BYTES_PER_LONG == 4 typedef unsigned long nsrefcnt; #else typedef PRUint32 nsrefcnt; #endif /** * Basic component object model interface. Objects which implement * this interface support runtime interface discovery (QueryInterface) * and a reference counted memory model (AddRef/Release). This is * modelled after the win32 IUnknown API. */ #ifndef VBOX_WITH_GLUE struct nsISupports_vtbl { nsresult (*QueryInterface)(nsISupports *pThis, const nsID *iid, void **resultp); nsrefcnt (*AddRef)(nsISupports *pThis); nsrefcnt (*Release)(nsISupports *pThis); }; #else /* !VBOX_WITH_GLUE */ struct nsISupportsVtbl { nsresult (*QueryInterface)(nsISupports *pThis, const nsID *iid, void **resultp); nsrefcnt (*AddRef)(nsISupports *pThis); nsrefcnt (*Release)(nsISupports *pThis); }; #define nsISupports_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp)) #define nsISupports_AddRef(p) ((p)->lpVtbl->AddRef(p)) #define nsISupports_Release(p) ((p)->lpVtbl->Release(p)) #define IUnknown_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp)) #define IUnknown_AddRef(p) ((p)->lpVtbl->AddRef(p)) #define IUnknown_Release(p) ((p)->lpVtbl->Release(p)) #define IDispatch_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp)) #define IDispatch_AddRef(p) ((p)->lpVtbl->AddRef(p)) #define IDispatch_Release(p) ((p)->lpVtbl->Release(p)) #endif /* !VBOX_WITH_GLUE */ interface nsISupports { #ifndef VBOX_WITH_GLUE struct nsISupports_vtbl *vtbl; #else /* !VBOX_WITH_GLUE */ CONST_VTBL struct nsISupportsVtbl *lpVtbl; #endif /* !VBOX_WITH_GLUE */ }; /* starting interface: nsIException */ #define NS_IEXCEPTION_IID_STR "f3a8d3b4-c424-4edc-8bf6-8974c983ba78" #define NS_IEXCEPTION_IID \ {0xf3a8d3b4, 0xc424, 0x4edc, \ { 0x8b, 0xf6, 0x89, 0x74, 0xc9, 0x83, 0xba, 0x78 }} #ifndef VBOX_WITH_GLUE struct nsIException_vtbl { /* Methods from the interface nsISupports */ struct nsISupports_vtbl nsisupports; nsresult (*GetMessage)(nsIException *pThis, PRUnichar * *aMessage); nsresult (*GetResult)(nsIException *pThis, nsresult *aResult); nsresult (*GetName)(nsIException *pThis, PRUnichar * *aName); nsresult (*GetFilename)(nsIException *pThis, PRUnichar * *aFilename); nsresult (*GetLineNumber)(nsIException *pThis, PRUint32 *aLineNumber); nsresult (*GetColumnNumber)(nsIException *pThis, PRUint32 *aColumnNumber); nsresult (*GetLocation)(nsIException *pThis, nsIStackFrame * *aLocation); nsresult (*GetInner)(nsIException *pThis, nsIException * *aInner); nsresult (*GetData)(nsIException *pThis, nsISupports * *aData); nsresult (*ToString)(nsIException *pThis, PRUnichar **_retval); }; #else /* !VBOX_WITH_GLUE */ struct nsIExceptionVtbl { nsresult (*QueryInterface)(nsIException *pThis, const nsID *iid, void **resultp); nsrefcnt (*AddRef)(nsIException *pThis); nsrefcnt (*Release)(nsIException *pThis); nsresult (*GetMessage)(nsIException *pThis, PRUnichar * *aMessage); nsresult (*GetResult)(nsIException *pThis, nsresult *aResult); nsresult (*GetName)(nsIException *pThis, PRUnichar * *aName); nsresult (*GetFilename)(nsIException *pThis, PRUnichar * *aFilename); nsresult (*GetLineNumber)(nsIException *pThis, PRUint32 *aLineNumber); nsresult (*GetColumnNumber)(nsIException *pThis, PRUint32 *aColumnNumber); nsresult (*GetLocation)(nsIException *pThis, nsIStackFrame * *aLocation); nsresult (*GetInner)(nsIException *pThis, nsIException * *aInner); nsresult (*GetData)(nsIException *pThis, nsISupports * *aData); nsresult (*ToString)(nsIException *pThis, PRUnichar **_retval); }; #define nsIException_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp)) #define nsIException_AddRef(p) ((p)->lpVtbl->AddRef(p)) #define nsIException_Release(p) ((p)->lpVtbl->Release(p)) #define nsIException_get_Message(p, aMessage) ((p)->lpVtbl->GetMessage(p, aMessage)) #define nsIException_GetMessage(p, aMessage) ((p)->lpVtbl->GetMessage(p, aMessage)) #define nsIException_get_Result(p, aResult) ((p)->lpVtbl->GetResult(p, aResult)) #define nsIException_GetResult(p, aResult) ((p)->lpVtbl->GetResult(p, aResult)) #define nsIException_get_Name(p, aName) ((p)->lpVtbl->GetName(p, aName)) #define nsIException_GetName(p, aName) ((p)->lpVtbl->GetName(p, aName)) #define nsIException_get_Filename(p, aFilename) ((p)->lpVtbl->GetFilename(p, aFilename)) #define nsIException_GetFilename(p, aFilename) ((p)->lpVtbl->GetFilename(p, aFilename)) #define nsIException_get_LineNumber(p, aLineNumber) ((p)->lpVtbl->GetLineNumber(p, aLineNumber)) #define nsIException_GetLineNumber(p, aLineNumber) ((p)->lpVtbl->GetLineNumber(p, aLineNumber)) #define nsIException_get_ColumnNumber(p, aColumnNumber) ((p)->lpVtbl->GetColumnNumber(p, aColumnNumber)) #define nsIException_GetColumnNumber(p, aColumnNumber) ((p)->lpVtbl->GetColumnNumber(p, aColumnNumber)) #define nsIException_get_Inner(p, aInner) ((p)->lpVtbl->GetInner(p, aInner)) #define nsIException_GetInner(p, aInner) ((p)->lpVtbl->GetInner(p, aInner)) #define nsIException_get_Data(p, aData) ((p)->lpVtbl->GetData(p, aData)) #define nsIException_GetData(p, aData) ((p)->lpVtbl->GetData(p, aData)) #define nsIException_ToString(p, retval) ((p)->lpVtbl->ToString(p, retval)) #define IErrorInfo_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp)) #define IErrorInfo_AddRef(p) ((p)->lpVtbl->AddRef(p)) #define IErrorInfo_Release(p) ((p)->lpVtbl->Release(p)) #define IErrorInfo_get_Message(p, aMessage) ((p)->lpVtbl->GetMessage(p, aMessage)) #define IErrorInfo_GetMessage(p, aMessage) ((p)->lpVtbl->GetMessage(p, aMessage)) #define IErrorInfo_get_Result(p, aResult) ((p)->lpVtbl->GetResult(p, aResult)) #define IErrorInfo_GetResult(p, aResult) ((p)->lpVtbl->GetResult(p, aResult)) #define IErrorInfo_get_Name(p, aName) ((p)->lpVtbl->GetName(p, aName)) #define IErrorInfo_GetName(p, aName) ((p)->lpVtbl->GetName(p, aName)) #define IErrorInfo_get_Filename(p, aFilename) ((p)->lpVtbl->GetFilename(p, aFilename)) #define IErrorInfo_GetFilename(p, aFilename) ((p)->lpVtbl->GetFilename(p, aFilename)) #define IErrorInfo_get_LineNumber(p, aLineNumber) ((p)->lpVtbl->GetLineNumber(p, aLineNumber)) #define IErrorInfo_GetLineNumber(p, aLineNumber) ((p)->lpVtbl->GetLineNumber(p, aLineNumber)) #define IErrorInfo_get_ColumnNumber(p, aColumnNumber) ((p)->lpVtbl->GetColumnNumber(p, aColumnNumber)) #define IErrorInfo_GetColumnNumber(p, aColumnNumber) ((p)->lpVtbl->GetColumnNumber(p, aColumnNumber)) #define IErrorInfo_get_Inner(p, aInner) ((p)->lpVtbl->GetInner(p, aInner)) #define IErrorInfo_GetInner(p, aInner) ((p)->lpVtbl->GetInner(p, aInner)) #define IErrorInfo_get_Data(p, aData) ((p)->lpVtbl->GetData(p, aData)) #define IErrorInfo_GetData(p, aData) ((p)->lpVtbl->GetData(p, aData)) #define IErrorInfo_ToString(p, retval) ((p)->lpVtbl->ToString(p, retval)) #endif /* !VBOX_WITH_GLUE */ interface nsIException { #ifndef VBOX_WITH_GLUE struct nsIException_vtbl *vtbl; #else /* !VBOX_WITH_GLUE */ CONST_VTBL struct nsIExceptionVtbl *lpVtbl; #endif /* !VBOX_WITH_GLUE */ }; /* starting interface: nsIStackFrame */ #define NS_ISTACKFRAME_IID_STR "91d82105-7c62-4f8b-9779-154277c0ee90" #define NS_ISTACKFRAME_IID \ {0x91d82105, 0x7c62, 0x4f8b, \ { 0x97, 0x79, 0x15, 0x42, 0x77, 0xc0, 0xee, 0x90 }} #ifndef VBOX_WITH_GLUE struct nsIStackFrame_vtbl { /* Methods from the interface nsISupports */ struct nsISupports_vtbl nsisupports; nsresult (*GetLanguage)(nsIStackFrame *pThis, PRUint32 *aLanguage); nsresult (*GetLanguageName)(nsIStackFrame *pThis, PRUnichar * *aLanguageName); nsresult (*GetFilename)(nsIStackFrame *pThis, PRUnichar * *aFilename); nsresult (*GetName)(nsIStackFrame *pThis, PRUnichar * *aName); nsresult (*GetLineNumber)(nsIStackFrame *pThis, PRInt32 *aLineNumber); nsresult (*GetSourceLine)(nsIStackFrame *pThis, PRUnichar * *aSourceLine); nsresult (*GetCaller)(nsIStackFrame *pThis, nsIStackFrame * *aCaller); nsresult (*ToString)(nsIStackFrame *pThis, PRUnichar **_retval); }; #else /* !VBOX_WITH_GLUE */ struct nsIStackFrameVtbl { nsresult (*QueryInterface)(nsIStackFrame *pThis, const nsID *iid, void **resultp); nsrefcnt (*AddRef)(nsIStackFrame *pThis); nsrefcnt (*Release)(nsIStackFrame *pThis); nsresult (*GetLanguage)(nsIStackFrame *pThis, PRUint32 *aLanguage); nsresult (*GetLanguageName)(nsIStackFrame *pThis, PRUnichar * *aLanguageName); nsresult (*GetFilename)(nsIStackFrame *pThis, PRUnichar * *aFilename); nsresult (*GetName)(nsIStackFrame *pThis, PRUnichar * *aName); nsresult (*GetLineNumber)(nsIStackFrame *pThis, PRInt32 *aLineNumber); nsresult (*GetSourceLine)(nsIStackFrame *pThis, PRUnichar * *aSourceLine); nsresult (*GetCaller)(nsIStackFrame *pThis, nsIStackFrame * *aCaller); nsresult (*ToString)(nsIStackFrame *pThis, PRUnichar **_retval); }; #define nsIStackFrame_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp)) #define nsIStackFrame_AddRef(p) ((p)->lpVtbl->AddRef(p)) #define nsIStackFrame_Release(p) ((p)->lpVtbl->Release(p)) #define nsIStackFrame_get_Language(p, aLanguage) ((p)->lpVtbl->GetLanguge(p, aLanguage)) #define nsIStackFrame_GetLanguage(p, aLanguage) ((p)->lpVtbl->GetLanguge(p, aLanguage)) #define nsIStackFrame_get_LanguageName(p, aLanguageName) ((p)->lpVtbl->GetLanguageName(p, aLanguageName)) #define nsIStackFrame_GetLanguageName(p, aLanguageName) ((p)->lpVtbl->GetLanguageName(p, aLanguageName)) #define nsIStackFrame_get_Filename(p, aFilename) ((p)->lpVtbl->GetFilename(p, aFilename)) #define nsIStackFrame_GetFilename(p, aFilename) ((p)->lpVtbl->GetFilename(p, aFilename)) #define nsIStackFrame_get_Name(p, aName) ((p)->lpVtbl->GetName(p, aName)) #define nsIStackFrame_GetName(p, aName) ((p)->lpVtbl->GetName(p, aName)) #define nsIStackFrame_get_LineNumber(p, aLineNumber) ((p)->lpVtbl->GetLineNumber(p, aLineNumber)) #define nsIStackFrame_GetLineNumber(p, aLineNumber) ((p)->lpVtbl->GetLineNumber(p, aLineNumber)) #define nsIStackFrame_get_SourceLine(p, aSourceLine) ((p)->lpVtbl->GetSourceLine(p, aSourceLine)) #define nsIStackFrame_GetSourceLine(p, aSourceLine) ((p)->lpVtbl->GetSourceLine(p, aSourceLine)) #define nsIStackFrame_get_Caller(p, aCaller) ((p)->lpVtbl->GetCaller(p, aCaller)) #define nsIStackFrame_GetCaller(p, aCaller) ((p)->lpVtbl->GetCaller(p, aCaller)) #define nsIStackFrame_ToString(p, retval) ((p)->lpVtbl->ToString(p, retval)) #endif /* !VBOX_WITH_GLUE */ interface nsIStackFrame { #ifndef VBOX_WITH_GLUE struct nsIStackFrame_vtbl *vtbl; #else /* !VBOX_WITH_GLUE */ CONST_VTBL struct nsIStackFrameVtbl *lpVtbl; #endif /* !VBOX_WITH_GLUE */ }; /* starting interface: nsIEventTarget */ #define NS_IEVENTTARGET_IID_STR "ea99ad5b-cc67-4efb-97c9-2ef620a59f2a" #define NS_IEVENTTARGET_IID \ {0xea99ad5b, 0xcc67, 0x4efb, \ { 0x97, 0xc9, 0x2e, 0xf6, 0x20, 0xa5, 0x9f, 0x2a }} #ifndef VBOX_WITH_GLUE struct nsIEventTarget_vtbl { struct nsISupports_vtbl nsisupports; nsresult (*PostEvent)(nsIEventTarget *pThis, PLEvent * aEvent); nsresult (*IsOnCurrentThread)(nsIEventTarget *pThis, PRBool *_retval); }; #else /* !VBOX_WITH_GLUE */ struct nsIEventTargetVtbl { nsresult (*QueryInterface)(nsIEventTarget *pThis, const nsID *iid, void **resultp); nsrefcnt (*AddRef)(nsIEventTarget *pThis); nsrefcnt (*Release)(nsIEventTarget *pThis); nsresult (*PostEvent)(nsIEventTarget *pThis, PLEvent * aEvent); nsresult (*IsOnCurrentThread)(nsIEventTarget *pThis, PRBool *_retval); }; #define nsIEventTarget_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp)) #define nsIEventTarget_AddRef(p) ((p)->lpVtbl->AddRef(p)) #define nsIEventTarget_Release(p) ((p)->lpVtbl->Release(p)) #define nsIEventTarget_PostEvent(p, aEvent) ((p)->lpVtbl->PostEvent(p, aEvent)) #define nsIEventTarget_IsOnCurrentThread(p, retval) ((p)->lpVtbl->IsOnCurrentThread(p, retval)) #endif /* !VBOX_WITH_GLUE */ interface nsIEventTarget { #ifndef VBOX_WITH_GLUE struct nsIEventTarget_vtbl *vtbl; #else /* !VBOX_WITH_GLUE */ CONST_VTBL struct nsIEventTargetVtbl *lpVtbl; #endif /* !VBOX_WITH_GLUE */ }; /* starting interface: nsIEventQueue */ #define NS_IEVENTQUEUE_IID_STR "176afb41-00a4-11d3-9f2a-00400553eef0" #define NS_IEVENTQUEUE_IID \ {0x176afb41, 0x00a4, 0x11d3, \ { 0x9f, 0x2a, 0x00, 0x40, 0x05, 0x53, 0xee, 0xf0 }} #ifndef VBOX_WITH_GLUE struct nsIEventQueue_vtbl { struct nsIEventTarget_vtbl nsieventtarget; nsresult (*InitEvent)(nsIEventQueue *pThis, PLEvent * aEvent, void * owner, PLHandleEventProc handler, PLDestroyEventProc destructor); nsresult (*PostSynchronousEvent)(nsIEventQueue *pThis, PLEvent * aEvent, void * *aResult); nsresult (*PendingEvents)(nsIEventQueue *pThis, PRBool *_retval); nsresult (*ProcessPendingEvents)(nsIEventQueue *pThis); nsresult (*EventLoop)(nsIEventQueue *pThis); nsresult (*EventAvailable)(nsIEventQueue *pThis, PRBool *aResult); nsresult (*GetEvent)(nsIEventQueue *pThis, PLEvent * *_retval); nsresult (*HandleEvent)(nsIEventQueue *pThis, PLEvent * aEvent); nsresult (*WaitForEvent)(nsIEventQueue *pThis, PLEvent * *_retval); PRInt32 (*GetEventQueueSelectFD)(nsIEventQueue *pThis); nsresult (*Init)(nsIEventQueue *pThis, PRBool aNative); nsresult (*InitFromPRThread)(nsIEventQueue *pThis, PRThread * thread, PRBool aNative); nsresult (*InitFromPLQueue)(nsIEventQueue *pThis, PLEventQueue * aQueue); nsresult (*EnterMonitor)(nsIEventQueue *pThis); nsresult (*ExitMonitor)(nsIEventQueue *pThis); nsresult (*RevokeEvents)(nsIEventQueue *pThis, void * owner); nsresult (*GetPLEventQueue)(nsIEventQueue *pThis, PLEventQueue * *_retval); nsresult (*IsQueueNative)(nsIEventQueue *pThis, PRBool *_retval); nsresult (*StopAcceptingEvents)(nsIEventQueue *pThis); }; #else /* !VBOX_WITH_GLUE */ struct nsIEventQueueVtbl { nsresult (*QueryInterface)(nsIEventQueue *pThis, const nsID *iid, void **resultp); nsrefcnt (*AddRef)(nsIEventQueue *pThis); nsrefcnt (*Release)(nsIEventQueue *pThis); nsresult (*PostEvent)(nsIEventQueue *pThis, PLEvent * aEvent); nsresult (*IsOnCurrentThread)(nsIEventQueue *pThis, PRBool *_retval); nsresult (*InitEvent)(nsIEventQueue *pThis, PLEvent * aEvent, void * owner, PLHandleEventProc handler, PLDestroyEventProc destructor); nsresult (*PostSynchronousEvent)(nsIEventQueue *pThis, PLEvent * aEvent, void * *aResult); nsresult (*PendingEvents)(nsIEventQueue *pThis, PRBool *_retval); nsresult (*ProcessPendingEvents)(nsIEventQueue *pThis); nsresult (*EventLoop)(nsIEventQueue *pThis); nsresult (*EventAvailable)(nsIEventQueue *pThis, PRBool *aResult); nsresult (*GetEvent)(nsIEventQueue *pThis, PLEvent * *_retval); nsresult (*HandleEvent)(nsIEventQueue *pThis, PLEvent * aEvent); nsresult (*WaitForEvent)(nsIEventQueue *pThis, PLEvent * *_retval); PRInt32 (*GetEventQueueSelectFD)(nsIEventQueue *pThis); nsresult (*Init)(nsIEventQueue *pThis, PRBool aNative); nsresult (*InitFromPRThread)(nsIEventQueue *pThis, PRThread * thread, PRBool aNative); nsresult (*InitFromPLQueue)(nsIEventQueue *pThis, PLEventQueue * aQueue); nsresult (*EnterMonitor)(nsIEventQueue *pThis); nsresult (*ExitMonitor)(nsIEventQueue *pThis); nsresult (*RevokeEvents)(nsIEventQueue *pThis, void * owner); nsresult (*GetPLEventQueue)(nsIEventQueue *pThis, PLEventQueue * *_retval); nsresult (*IsQueueNative)(nsIEventQueue *pThis, PRBool *_retval); nsresult (*StopAcceptingEvents)(nsIEventQueue *pThis); }; #define nsIEventQueue_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp)) #define nsIEventQueue_AddRef(p) ((p)->lpVtbl->AddRef(p)) #define nsIEventQueue_Release(p) ((p)->lpVtbl->Release(p)) #define nsIEventQueue_PostEvent(p, aEvent) ((p)->lpVtbl->PostEvent(p, aEvent)) #define nsIEventQueue_IsOnCurrentThread(p, retval) ((p)->lpVtbl->IsOnCurrentThread(p, retval)) #define nsIEventQueue_InitEvent(p, aEvent, owner, handler, destructor) ((p)->lpVtbl->InitEvent(p, aEvent, owner, handler, destructor)) #define nsIEventQueue_PostSynchronousEvent(p, aEvent, aResult) ((p)->lpVtbl->PostSynchronousEvent(p, aEvent, aResult)) #define nsIEventQueue_ProcessPendingEvents(p) ((p)->lpVtbl->ProcessPendingEvents(p)) #define nsIEventQueue_EventLoop(p) ((p)->lpVtbl->EventLoop(p)) #define nsIEventQueue_EventAvailable(p, aResult) ((p)->lpVtbl->EventAvailable(p, aResult)) #define nsIEventQueue_get_Event(p, aEvent) ((p)->lpVtbl->GetEvent(p, aEvent)) #define nsIEventQueue_GetEvent(p, aEvent) ((p)->lpVtbl->GetEvent(p, aEvent)) #define nsIEventQueue_HandleEvent(p, aEvent) ((p)->lpVtbl->HandleEvent(p, aEvent)) #define nsIEventQueue_WaitForEvent(p, aEvent) ((p)->lpVtbl->WaitForEvent(p, aEvent)) #define nsIEventQueue_GetEventQueueSelectFD(p) ((p)->lpVtbl->GetEventQueueSelectFD(p)) #define nsIEventQueue_Init(p, aNative) ((p)->lpVtbl->Init(p, aNative)) #define nsIEventQueue_InitFromPLQueue(p, aQueue) ((p)->lpVtbl->InitFromPLQueue(p, aQueue)) #define nsIEventQueue_EnterMonitor(p) ((p)->lpVtbl->EnterMonitor(p)) #define nsIEventQueue_ExitMonitor(p) ((p)->lpVtbl->ExitMonitor(p)) #define nsIEventQueue_RevokeEvents(p, owner) ((p)->lpVtbl->RevokeEvents(p, owner)) #define nsIEventQueue_GetPLEventQueue(p, retval) ((p)->lpVtbl->GetPLEventQueue(p, retval)) #define nsIEventQueue_IsQueueNative(p, retval) ((p)->lpVtbl->IsQueueNative(p, retval)) #define nsIEventQueue_StopAcceptingEvents(p) ((p)->lpVtbl->StopAcceptingEvents(p)) #endif /* !VBOX_WITH_GLUE */ interface nsIEventQueue { #ifndef VBOX_WITH_GLUE struct nsIEventQueue_vtbl *vtbl; #else /* !VBOX_WITH_GLUE */ CONST_VTBL struct nsIEventQueueVtbl *lpVtbl; #endif /* !VBOX_WITH_GLUE */ }; #endif /* __cplusplus */ #endif /* !WIN32 */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * Function table for dynamic linking. * Use VBoxGetCAPIFunctions() to obtain the pointer to it. */ typedef struct VBOXCAPI { /** The size of the structure. */ unsigned cb; /** The structure version. */ unsigned uVersion; /** Gets the VirtualBox version, major * 1000000 + minor * 1000 + patch. */ unsigned int (*pfnGetVersion)(void); /** Gets the VirtualBox API version, major * 1000 + minor, e.g. 4003. */ unsigned int (*pfnGetAPIVersion)(void); /** * New and preferred way to initialize the C bindings for an API client. * * This way is much more flexible, as it can easily handle multiple * sessions (important with more complicated API clients, including * multithreaded ones), and even VBoxSVC crashes can be detected and * processed appropriately by listening for events from the associated * event source in VirtualBoxClient. It is completely up to the client * to decide what to do (terminate or continue after getting new * object references to server-side objects). Must be called in the * primary thread of the client, later API use can be done in any * thread. * * Note that the returned reference is owned by the caller, and thus it's * the caller's responsibility to handle the reference count appropriately. * * @param pszVirtualBoxClientIID pass IVIRTUALBOXCLIENT_IID_STR * @param ppVirtualBoxClient output parameter for VirtualBoxClient * reference, handled as usual with COM/XPCOM. * @returns COM/XPCOM error code */ HRESULT (*pfnClientInitialize)(const char *pszVirtualBoxClientIID, IVirtualBoxClient **ppVirtualBoxClient); /** * Initialize the use of the C bindings in a non-primary thread. * * Must be called on any newly created thread which wants to use the * VirtualBox API. * * @returns COM/XPCOM error code */ HRESULT (*pfnClientThreadInitialize)(void); /** * Uninitialize the use of the C bindings in a non-primary thread. * * Should be called before terminating the thread which initialized the * C bindings using pfnClientThreadInitialize. * * @returns COM/XPCOM error code */ HRESULT (*pfnClientThreadUninitialize)(void); /** * Uninitialize the C bindings for an API client. * * Should be called when the API client is about to terminate and does * not want to use the C bindings any more. It will invalidate all * object references. It is possible, however, to change one's mind, * and call pfnClientInitialize again to continue using the API, as long * as none of the object references from before the re-initialization * are used. Must be called from the primary thread of the client. */ void (*pfnClientUninitialize)(void); /** * Deprecated way to initialize the C bindings and getting important * object references. Kept for backwards compatibility. * * If any returned reference is NULL then the initialization failed. * Note that the returned references are owned by the C bindings. The * number of calls to Release in the client code must match the number * of calls to AddRef, and additionally at no point in time there can * be more Release calls than AddRef calls. * * @param pszVirtualBoxIID pass IVIRTUALBOX_IID_STR * @param ppVirtualBox output parameter for VirtualBox reference, * owned by C bindings * @param pszSessionIID pass ISESSION_IID_STR * @param ppSession output parameter for Session reference, * owned by C bindings */ void (*pfnComInitialize)(const char *pszVirtualBoxIID, IVirtualBox **ppVirtualBox, const char *pszSessionIID, ISession **ppSession); /** * Deprecated way to uninitialize the C bindings for an API client. * Kept for backwards compatibility and must be used if the C bindings * were initialized using pfnComInitialize. */ void (*pfnComUninitialize)(void); /** * Free string managed by COM/XPCOM. * * @param pwsz pointer to string to be freed */ void (*pfnComUnallocString)(BSTR pwsz); #ifndef WIN32 /** Legacy function, was always for freeing strings only. */ #define pfnComUnallocMem(pv) pfnComUnallocString((BSTR)(pv)) #endif /* !WIN32 */ /** * Convert string from UTF-16 encoding to UTF-8 encoding. * * @param pwszString input string * @param ppszString output string * @returns IPRT status code */ int (*pfnUtf16ToUtf8)(CBSTR pwszString, char **ppszString); /** * Convert string from UTF-8 encoding to UTF-16 encoding. * * @param pszString input string * @param ppwszString output string * @returns IPRT status code */ int (*pfnUtf8ToUtf16)(const char *pszString, BSTR *ppwszString); /** * Free memory returned by pfnUtf16ToUtf8. Do not use for anything else. * * @param pszString string to be freed. */ void (*pfnUtf8Free)(char *pszString); /** * Free memory returned by pfnUtf8ToUtf16. Do not use for anything else. * * @param pwszString string to be freed. */ void (*pfnUtf16Free)(BSTR pwszString); /** * Create a safearray (used for passing arrays to COM/XPCOM) * * Must be freed by pfnSafeArrayDestroy. * * @param vt variant type, defines the size of the elements * @param lLbound lower bound of the index, should be 0 * @param cElements number of elements * @returns pointer to safearray */ SAFEARRAY *(*pfnSafeArrayCreateVector)(VARTYPE vt, LONG lLbound, ULONG cElements); /** * Pre-allocate a safearray to be used by an out safearray parameter * * Must be freed by pfnSafeArrayDestroy. * * @returns pointer to safearray (system dependent, may be NULL if * there is no need to pre-allocate a safearray) */ SAFEARRAY *(*pfnSafeArrayOutParamAlloc)(void); /** * Copy a C array into a safearray (for passing as an input parameter) * * @param psa pointer to already created safearray. * @param pv pointer to memory block to copy into safearray. * @param cb number of bytes to copy. * @returns COM/XPCOM error code */ HRESULT (*pfnSafeArrayCopyInParamHelper)(SAFEARRAY *psa, const void *pv, ULONG cb); /** * Copy a safearray into a C array (for getting an output parameter) * * @param ppv output pointer to newly created array, which has to * be freed with pfnArrayOutFree. * @param pcb number of bytes in the output buffer. * @param vt variant type, defines the size of the elements * @param psa pointer to safearray for getting the data * @returns COM/XPCOM error code */ HRESULT (*pfnSafeArrayCopyOutParamHelper)(void **ppv, ULONG *pcb, VARTYPE vt, SAFEARRAY *psa); /** * Copy a safearray into a C array (special variant for interface pointers) * * @param ppaObj output pointer to newly created array, which has * to be freed with pfnArrayOutFree. Note that it's the caller's * responsibility to call Release() on each non-NULL interface * pointer before freeing. * @param pcObj number of pointers in the output buffer. * @param psa pointer to safearray for getting the data * @returns COM/XPCOM error code */ HRESULT (*pfnSafeArrayCopyOutIfaceParamHelper)(IUnknown ***ppaObj, ULONG *pcObj, SAFEARRAY *psa); /** * Free a safearray * * @param psa pointer to safearray * @returns COM/XPCOM error code */ HRESULT (*pfnSafeArrayDestroy)(SAFEARRAY *psa); /** * Free an out array created by pfnSafeArrayCopyOutParamHelper or * pdnSafeArrayCopyOutIfaceParamHelper. * * @param psa pointer to memory block * @returns COM/XPCOM error code */ HRESULT (*pfnArrayOutFree)(void *pv); #ifndef WIN32 /** * Get XPCOM event queue. Deprecated! * * @param ppEventQueue output parameter for nsIEventQueue reference, * owned by C bindings. */ void (*pfnGetEventQueue)(nsIEventQueue **ppEventQueue); #endif /* !WIN32 */ /** * Get current COM/XPCOM exception. * * @param ppException output parameter for exception info reference, * may be @c NULL if no exception object has been created by * a previous COM/XPCOM call. * @returns COM/XPCOM error code */ HRESULT (*pfnGetException)(IErrorInfo **ppException); /** * Clears current COM/XPCOM exception. * * @returns COM/XPCOM error code */ HRESULT (*pfnClearException)(void); /** * Process the event queue for a given amount of time. * * Must be called on the primary thread. Typical timeouts are from 200 to * 5000 msecs, to allow for checking a volatile variable if the event queue * processing should be terminated (, * or 0 if only the pending events should be processed, without waiting. * * @param iTimeoutMS how long to process the event queue, -1 means * infinitely long * @returns status code * @retval 0 if at least one event has been processed * @retval 1 if any signal interrupted the native system call (or returned * otherwise) * @retval 2 if the event queue was explicitly interrupted * @retval 3 if the timeout expired * @retval 4 if the function was called from the wrong thread * @retval 5 for all other (unexpected) errors */ int (*pfnProcessEventQueue)(LONG64 iTimeoutMS); /** * Interrupt event queue processing. * * Can be called on any thread. Note that this function is not async-signal * safe, so never use it in such a context, instead use a volatile global * variable and a sensible timeout. * @returns 0 if successful, 1 otherwise. */ int (*pfnInterruptEventQueueProcessing)(void); /** * Clear memory used by a UTF-8 string. Must be zero terminated. * Can be used for any UTF-8 or ASCII/ANSI string. * * @param pszString input/output string */ void (*pfnUtf8Clear)(char *pszString); /** * Clear memory used by a UTF-16 string. Must be zero terminated. * Can be used for any UTF-16 or UCS-2 string. * * @param pwszString input/output string */ void (*pfnUtf16Clear)(BSTR pwszString); /** Tail version, same as uVersion. * * This should only be accessed if for some reason an API client needs * exactly the version it requested, or if cb is used to calculate the * address of this field. It may move as the structure before this is * allowed to grow as long as all the data from earlier minor versions * remains at the same place. */ unsigned uEndVersion; } VBOXCAPI; /** Pointer to a const VBOXCAPI function table. */ typedef VBOXCAPI const *PCVBOXCAPI; #ifndef WIN32 /** Backwards compatibility: Pointer to a const VBOXCAPI function table. * Use PCVBOXCAPI instead. */ typedef VBOXCAPI const *PCVBOXXPCOM; #endif /* !WIN32 */ #ifndef WIN32 /** Backwards compatibility: make sure old code using VBOXXPCOMC still compiles. * Use VBOXCAPI instead. */ #define VBOXXPCOMC VBOXCAPI #endif /* !WIN32 */ /** Extract the C API style major version. * Useful for comparing the interface version in VBOXCAPI::uVersion. */ #define VBOX_CAPI_MAJOR(x) (((x) & 0xffff0000U) >> 16) /** Extract the C API style major version. * Useful for comparing the interface version in VBOXCAPI::uVersion. */ #define VBOX_CAPI_MINOR(x) ((x) & 0x0000ffffU) /** The current interface version. * For use with VBoxGetCAPIFunctions and to be found in VBOXCAPI::uVersion. */ #define VBOX_CAPI_VERSION 0x00040001U #ifndef WIN32 /** Backwards compatibility: The current interface version. * Use VBOX_CAPI_VERSION instead. */ #define VBOX_XPCOMC_VERSION VBOX_CAPI_VERSION #endif /* !WIN32 */ /** VBoxGetCAPIFunctions. */ VBOXCAPI_DECL(PCVBOXCAPI) VBoxGetCAPIFunctions(unsigned uVersion); #ifndef WIN32 /** Backwards compatibility: VBoxGetXPCOMCFunctions. * Use VBoxGetCAPIFunctions instead. */ VBOXCAPI_DECL(PCVBOXCAPI) VBoxGetXPCOMCFunctions(unsigned uVersion); #endif /* !WIN32 */ /** Typedef for VBoxGetCAPIFunctions. */ typedef PCVBOXCAPI (*PFNVBOXGETCAPIFUNCTIONS)(unsigned uVersion); #ifndef WIN32 /** Backwards compatibility: Typedef for VBoxGetXPCOMCFunctions. * Use PFNVBOXGETCAPIFUNCTIONS instead. */ typedef PCVBOXCAPI (*PFNVBOXGETXPCOMCFUNCTIONS)(unsigned uVersion); #endif /* !WIN32 */ /** The symbol name of VBoxGetCAPIFunctions. */ #ifdef __OS2__ # define VBOX_GET_CAPI_FUNCTIONS_SYMBOL_NAME "_VBoxGetCAPIFunctions" #else /* !__OS2__ */ # define VBOX_GET_CAPI_FUNCTIONS_SYMBOL_NAME "VBoxGetCAPIFunctions" #endif /* !__OS2__ */ #ifndef WIN32 /** Backwards compatibility: The symbol name of VBoxGetXPCOMCFunctions. * Use VBOX_GET_CAPI_FUNCTIONS_SYMBOL_NAME instead. */ # ifdef __OS2__ # define VBOX_GET_XPCOMC_FUNCTIONS_SYMBOL_NAME "_VBoxGetXPCOMCFunctions" # else /* !__OS2__ */ # define VBOX_GET_XPCOMC_FUNCTIONS_SYMBOL_NAME "VBoxGetXPCOMCFunctions" # endif /* !__OS2__ */ #endif /* !WIN32 */ #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* !___VirtualBox_CAPI_h */ interface ; typedef interface ; #define _QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp)) #define _AddRef(p) ((p)->lpVtbl->AddRef(p)) #define _Release(p) ((p)->lpVtbl->Release(p)) #define _QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp)) #define _AddRef(p) ((p)->lpVtbl->AddRef(p)) #define _Release(p) ((p)->lpVtbl->Release(p)) #define _get_Message(p, aMessage) ((p)->lpVtbl->GetMessage(p, aMessage)) #define _GetMessage(p, aMessage) ((p)->lpVtbl->GetMessage(p, aMessage)) #define _get_Result(p, aResult) ((p)->lpVtbl->GetResult(p, aResult)) #define _GetResult(p, aResult) ((p)->lpVtbl->GetResult(p, aResult)) #define _get_Name(p, aName) ((p)->lpVtbl->GetName(p, aName)) #define _GetName(p, aName) ((p)->lpVtbl->GetName(p, aName)) #define _get_Filename(p, aFilename) ((p)->lpVtbl->GetFilename(p, aFilename)) #define _GetFilename(p, aFilename) ((p)->lpVtbl->GetFilename(p, aFilename)) #define _get_LineNumber(p, aLineNumber) ((p)->lpVtbl->GetLineNumber(p, aLineNumber)) #define _GetLineNumber(p, aLineNumber) ((p)->lpVtbl->GetLineNumber(p, aLineNumber)) #define _get_ColumnNumber(p, aColumnNumber) ((p)->lpVtbl->GetColumnNumber(p, aColumnNumber)) #define _GetColumnNumber(p, aColumnNumber) ((p)->lpVtbl->GetColumnNumber(p, aColumnNumber)) #define _get_Location(p, aLocation) ((p)->lpVtbl->GetLocation(p, aLocation)) #define _GetLocation(p, aLocation) ((p)->lpVtbl->GetLocation(p, aLocation)) #define _get_Inner(p, aInner) ((p)->lpVtbl->GetInner(p, aInner)) #define _GetInner(p, aInner) ((p)->lpVtbl->GetInner(p, aInner)) #define _get_Data(p, aData) ((p)->lpVtbl->GetData(p, aData)) #define _GetData(p, aData) ((p)->lpVtbl->GetData(p, aData)) #define _ToString(p, retval) ((p)->lpVtbl->ToString(p, retval)) nsresult (*QueryInterface)( *pThis, const nsID *iid, void **resultp); nsrefcnt (*AddRef)( *pThis); nsrefcnt (*Release)( *pThis); nsresult (*QueryInterface)( *pThis, const nsID *iid, void **resultp); nsrefcnt (*AddRef)( *pThis); nsrefcnt (*Release)( *pThis); nsresult (*GetMessage)( *pThis, PRUnichar * *aMessage); nsresult (*GetResult)( *pThis, nsresult *aResult); nsresult (*GetName)( *pThis, PRUnichar * *aName); nsresult (*GetFilename)( *pThis, PRUnichar * *aFilename); nsresult (*GetLineNumber)( *pThis, PRUint32 *aLineNumber); nsresult (*GetColumnNumber)( *pThis, PRUint32 *aColumnNumber); nsresult (*GetLocation)( *pThis, nsIStackFrame * *aLocation); nsresult (*GetInner)( *pThis, nsIException * *aInner); nsresult (*GetData)( *pThis, nsISupports * *aData); nsresult (*ToString)( *pThis, PRUnichar **_retval); nsresult (*GetInternalAndReservedAttribute )( *pThis, PRUint32 *reserved); nsresult (*InternalAndReservedMethod )( *pThis); /* Start of struct declaration */ #define #define _IID { \ 0x , 0x , 0x , \ { 0x , 0x , 0x , 0x , 0x , 0x , 0x , 0x } \ } /* COM compatibility */ VBOX_EXTERN_CONST(nsIID, IID_ ); #ifndef VBOX_WITH_GLUE struct _vtbl { struct nsISupports_vtbl nsisupports; struct nsIException_vtbl nsiexception; struct _vtbl ; nsresult (*GetInternalAndReservedAttribute )( *pThis, PRUint32 *reserved); nsresult (*InternalAndReservedMethod )( *pThis); }; #else /* VBOX_WITH_GLUE */ struct Vtbl { }; #endif /* VBOX_WITH_GLUE */ interface { #ifndef VBOX_WITH_GLUE struct _vtbl *vtbl; #else /* VBOX_WITH_GLUE */ CONST_VTBL struct Vtbl *lpVtbl; #endif /* VBOX_WITH_GLUE */ }; /* End of struct declaration */ nsresult (*Get )( *pThis, PRUint32 * Size, ** ); nsresult (*Set )( *pThis, PRUint32 Size, * ); nsresult (*Get )( *pThis, * ); nsresult (*Get )( *pThis, * ); nsresult (*Set )( *pThis, ); #define (p, a ) ((p)->lpVtbl->Get (p, a )) #define (p, a ) ((p)->lpVtbl->Get (p, a )) #define (p, a ) ((p)->lpVtbl->Set (p, a )) #define (p, a ) ((p)->lpVtbl->Set (p, a )) nsresult (* )( *pThis, , ); )( *pThis ); #define (p , a ) ((p)->lpVtbl-> (p , a )) #define NS_ _CID { \ 0x , 0x , 0x , \ { 0x , 0x , 0x , 0x , 0x , 0x , 0x , 0x } \ } #define NS_ _CONTRACTID "@ / ;1" /* COM compatibility */ VBOX_EXTERN_CONST(nsCID, CLSID_ ); /* Start of enum declaration */ #define #define _IID { \ 0x , 0x , 0x , \ { 0x , 0x , 0x , 0x , 0x , 0x , 0x , 0x } \ } typedef enum { _ = , } ; /* End of enum declaration */ #define PRUint32 Size, PRUint32 * Size, PRUint32 * Size, PRUint32 Size, * ** ** * * * PRUint32 * a Size, * * a booleanPtr octetPtr shortPtr ushortPtr longPtr llongPtr ulongPtr ullongPtr attribute 'mod= ' cannot be used with type wstring attribute 'mod= ' cannot be used with type of attribute 'mod' is invalid! nsresult boolean octet short unsigned short long long long unsigned long unsigned long long char wchar string wstring nsIDPtr : Non-readonly uuid attributes are not supported! nsIDRef nsIDPtr nsISupports PRUint32 Unknown parameter type: PRBool * PRUint8 * PRInt16 * PRUint16 * PRInt32 * PRInt64 * PRUint32 * PRUint64 * attribute 'mod= ' cannot be used with type PRUnichar * attribute 'mod= ' cannot be used with type nsresult PRBool PRUint8 PRInt16 PRUint16 PRInt32 PRInt64 PRUint32 PRUint64 char PRUnichar char * PRUnichar * nsID * const nsID * nsID * nsISupports * PRUint32 *