diff --git a/src/vbox/vbox_common.h b/src/vbox/vbox_common.h index ec2f9637dc..a2d0903c45 100644 --- a/src/vbox/vbox_common.h +++ b/src/vbox/vbox_common.h @@ -405,6 +405,9 @@ typedef nsISupports IKeyboard; abort(); \ } while (0) +#define VBOX_QUERY_INTERFACE(nsi, iid, resultp) \ + gVBoxAPI.nsUISupports.QueryInterface((void*)(nsi), iid, resultp) + #define VBOX_ADDREF(arg) gVBoxAPI.nsUISupports.AddRef((void *)(arg)) #define VBOX_RELEASE(arg) \ diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index 9976867004..32bfbecabc 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -561,6 +561,11 @@ static void* _handleHostGetNetworkInterfaces(IHost *host) return host->vtbl->GetNetworkInterfaces; } +static nsresult _nsisupportsQueryInterface(nsISupports *nsi, const nsID *iid, void **resultp) +{ + return nsi->vtbl->QueryInterface(nsi, iid, resultp); +} + static nsresult _nsisupportsRelease(nsISupports *nsi) { return nsi->vtbl->Release(nsi); @@ -2219,6 +2224,7 @@ static vboxUniformedArray _UArray = { }; static vboxUniformednsISupports _nsUISupports = { + .QueryInterface = _nsisupportsQueryInterface, .Release = _nsisupportsRelease, .AddRef = _nsisupportsAddRef, }; diff --git a/src/vbox/vbox_uniformed_api.h b/src/vbox/vbox_uniformed_api.h index c1a2af1d42..ba655feb95 100644 --- a/src/vbox/vbox_uniformed_api.h +++ b/src/vbox/vbox_uniformed_api.h @@ -145,6 +145,7 @@ typedef struct { /* Functions for nsISupports */ typedef struct { + nsresult (*QueryInterface)(nsISupports *nsi, const nsID *iid, void **resultp); nsresult (*Release)(nsISupports *nsi); nsresult (*AddRef)(nsISupports *nsi); } vboxUniformednsISupports;