Wine-devel
Threads by month
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
October 2019
- 80 participants
- 669 discussions
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
---
include/basetyps.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/include/basetyps.h b/include/basetyps.h
index 94875334b0..6e4f9e6d16 100644
--- a/include/basetyps.h
+++ b/include/basetyps.h
@@ -39,6 +39,8 @@
#define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE
#define STDMETHODIMPV_(t) t STDMETHODVCALLTYPE
+#define COM_DECLSPEC_NOTHROW
+
#if defined(__cplusplus) && !defined(CINTERFACE)
# define interface struct
# define STDMETHOD(m) virtual HRESULT STDMETHODCALLTYPE m
--
2.17.1
2
1
Needed by Cygwin's mintty.exe.
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/gdi32/font.c | 57 ++++++++++++++++++++++++++++++++++-------
dlls/gdi32/tests/font.c | 46 +++++++++++++++++++++++++++++++++
2 files changed, 94 insertions(+), 9 deletions(-)
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index b06ff6d354a..d451f30c3ee 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -36,6 +36,7 @@
#include "winreg.h"
#include "gdi_private.h"
#include "wine/exception.h"
+#include "wine/heap.h"
#include "wine/unicode.h"
#include "wine/debug.h"
@@ -3471,23 +3472,61 @@ done:
/*************************************************************************
* GetCharWidthFloatA [GDI32.@]
*/
-BOOL WINAPI GetCharWidthFloatA(HDC hdc, UINT iFirstChar,
- UINT iLastChar, PFLOAT pxBuffer)
+BOOL WINAPI GetCharWidthFloatA( HDC hdc, UINT first, UINT last, float *buffer )
{
- FIXME("%p, %u, %u, %p: stub!\n", hdc, iFirstChar, iLastChar, pxBuffer);
- return FALSE;
+ WCHAR *wstr;
+ int i, wlen;
+ char *str;
+
+ if (!(str = FONT_GetCharsByRangeA( hdc, first, last, &i )))
+ return FALSE;
+ wstr = FONT_mbtowc( hdc, str, i, &wlen, NULL );
+ heap_free(str);
+
+ for (i = 0; i < wlen; ++i)
+ {
+ if (!GetCharWidthFloatW( hdc, wstr[i], wstr[i], &buffer[i] ))
+ {
+ heap_free(wstr);
+ return FALSE;
+ }
+ }
+ heap_free(wstr);
+ return TRUE;
}
/*************************************************************************
* GetCharWidthFloatW [GDI32.@]
*/
-BOOL WINAPI GetCharWidthFloatW(HDC hdc, UINT iFirstChar,
- UINT iLastChar, PFLOAT pxBuffer)
+BOOL WINAPI GetCharWidthFloatW( HDC hdc, UINT first, UINT last, float *buffer )
{
- FIXME("%p, %u, %u, %p: stub!\n", hdc, iFirstChar, iLastChar, pxBuffer);
- return FALSE;
-}
+ DC *dc = get_dc_ptr( hdc );
+ int *ibuffer;
+ PHYSDEV dev;
+ BOOL ret;
+ UINT i;
+
+ TRACE("dc %p, first %#x, last %#x, buffer %p\n", dc, first, last, buffer);
+
+ if (!dc) return FALSE;
+ if (!(ibuffer = heap_alloc( (last - first + 1) * sizeof(int) )))
+ {
+ release_dc_ptr( dc );
+ return FALSE;
+ }
+
+ dev = GET_DC_PHYSDEV( dc, pGetCharWidth );
+ if ((ret = dev->funcs->pGetCharWidth( dev, first, last, ibuffer )))
+ {
+ float scale = fabs( dc->xformVport2World.eM11 ) / 16.0f;
+ for (i = first; i <= last; ++i)
+ buffer[i - first] = ibuffer[i - first] * scale;
+ }
+
+ heap_free(ibuffer);
+ return ret;
+}
/***********************************************************************
* *
diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c
index b57effd349d..ccae09edc19 100644
--- a/dlls/gdi32/tests/font.c
+++ b/dlls/gdi32/tests/font.c
@@ -7189,6 +7189,51 @@ static void test_GetCharWidthInfo(void)
ReleaseDC(NULL, hdc);
}
+static int CALLBACK get_char_width_proc(const LOGFONTA *lf,
+ const TEXTMETRICA *tm, DWORD type, LPARAM ctx)
+{
+ HFONT font = CreateFontIndirectA(lf);
+ HDC dc = GetDC(NULL);
+ const char c = 'm';
+ ABCFLOAT abcf;
+ int i, i32;
+ BOOL ret;
+ float f;
+ ABC abc;
+
+ SelectObject(dc, font);
+
+ ret = GetCharWidthFloatA(dc, c, c, &f);
+ ok(ret, "%s: GetCharWidthFloat() failed\n", lf->lfFaceName);
+ ret = GetCharWidth32A(dc, c, c, &i32);
+ ok(ret, "%s: GetCharWidth32A() failed\n", lf->lfFaceName);
+ ret = GetCharWidthA(dc, c, c, &i);
+ ok(ret, "%s: GetCharWidthA() failed\n", lf->lfFaceName);
+ ok(i == i32, "%s: mismatched widths %d/%d\n", lf->lfFaceName, i, i32);
+ ok((float)i / 16.0f == f, "%s: mismatched widths %d/%.8e\n", lf->lfFaceName, i, f);
+
+ ret = GetCharABCWidthsFloatA(dc, c, c, &abcf);
+ ok(ret, "%s: GetCharABCWidths() failed\n", lf->lfFaceName);
+ if (GetCharABCWidthsA(dc, c, c, &abc))
+ ok((float)abc.abcB == abcf.abcfB, "%s: mismatched widths %d/%.8e\n",
+ lf->lfFaceName, abc.abcB, abcf.abcfB);
+
+ ReleaseDC(NULL, dc);
+ DeleteObject(font);
+ return 1;
+}
+
+static void test_char_width(void)
+{
+ HDC dc = GetDC(NULL);
+ LOGFONTA lf = {0};
+
+ lf.lfCharSet = DEFAULT_CHARSET;
+ EnumFontFamiliesExA(dc, &lf, get_char_width_proc, 0, 0);
+
+ ReleaseDC(NULL, dc);
+}
+
START_TEST(font)
{
static const char *test_names[] =
@@ -7271,6 +7316,7 @@ START_TEST(font)
test_bitmap_font_glyph_index();
test_GetCharWidthI();
test_long_names();
+ test_char_width();
/* These tests should be last test until RemoveFontResource
* is properly implemented.
--
2.23.0
2
3
[PATCH v2] gdi32: Collapse relative paths inside true type fonts file names in registry.
by Paul Gofman 17 Oct '19
by Paul Gofman 17 Oct '19
17 Oct '19
Signed-off-by: Paul Gofman <gofmanp(a)gmail.com>
---
v2: Introduce get_full_path_name() helper function.
dlls/gdi32/freetype.c | 40 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 39 insertions(+), 1 deletion(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index e3cff25b76..f0e5514649 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -3107,6 +3107,33 @@ static void load_system_fonts(void)
}
}
+static WCHAR *get_full_path_name(const WCHAR *name)
+{
+ WCHAR *full_path;
+ DWORD len;
+
+ if (!(len = GetFullPathNameW(name, 0, NULL, NULL)))
+ {
+ ERR("GetFullPathNameW() failed, name %s.\n", debugstr_w(name));
+ return NULL;
+ }
+
+ if (!(full_path = HeapAlloc(GetProcessHeap(), 0, len * sizeof(*full_path))))
+ {
+ ERR("Could not get memory.\n");
+ return NULL;
+ }
+
+ if (GetFullPathNameW(name, len, full_path, NULL) != len - 1)
+ {
+ ERR("Unexpected GetFullPathNameW() result, name %s.\n", debugstr_w(name));
+ HeapFree(GetProcessHeap(), 0, full_path);
+ return NULL;
+ }
+
+ return full_path;
+}
+
/*************************************************************
*
* This adds registry entries for any externally loaded fonts
@@ -3121,7 +3148,7 @@ static void update_reg_entries(void)
DWORD len;
Family *family;
Face *face;
- WCHAR *file, *path;
+ WCHAR *file, *path, *full_path;
static const WCHAR TrueType[] = {' ','(','T','r','u','e','T','y','p','e',')','\0'};
if(RegCreateKeyExW(HKEY_LOCAL_MACHINE, winnt_font_reg_key,
@@ -3168,11 +3195,22 @@ static void update_reg_entries(void)
HeapFree( GetProcessHeap(), 0, buffer );
if (path)
+ {
+ if ((full_path = get_full_path_name(path)))
+ {
+ HeapFree(GetProcessHeap(), 0, path);
+ path = full_path;
+ }
file = path;
+ }
else if ((file = strrchrW(face->file, '/')))
+ {
file++;
+ }
else
+ {
file = face->file;
+ }
len = strlenW(file) + 1;
RegSetValueExW(winnt_key, valueW, 0, REG_SZ, (BYTE*)file, len * sizeof(WCHAR));
--
2.21.0
2
1
17 Oct '19
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
include/mfreadwrite.idl | 93 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 93 insertions(+)
diff --git a/include/mfreadwrite.idl b/include/mfreadwrite.idl
index cbfeef812c..93920a2d38 100644
--- a/include/mfreadwrite.idl
+++ b/include/mfreadwrite.idl
@@ -46,6 +46,13 @@ typedef [v1_enum] enum MF_SOURCE_READER_FLAG
MF_SOURCE_READERF_ALLEFFECTSREMOVED = 0x00000200,
} MF_SOURCE_READER_FLAG;
+enum
+{
+ MF_SINK_WRITER_INVALID_STREAM_INDEX = 0xffffffff,
+ MF_SINK_WRITER_ALL_STREAMS = 0xfffffffe,
+ MF_SINK_WRITER_MEDIASINK = 0xffffffff,
+};
+
typedef struct _MF_SINK_WRITER_STATISTICS
{
DWORD cb;
@@ -116,6 +123,20 @@ interface IMFSourceReaderCallback : IUnknown
[in] IMFMediaEvent *event);
}
+[
+ object,
+ uuid(cf839fe6-8c2a-4dd2-b6ea-c22d6961af05),
+ local
+]
+interface IMFSourceReaderCallback2 : IMFSourceReaderCallback
+{
+ HRESULT OnTransformChange();
+
+ HRESULT OnStreamError(
+ [in] DWORD stream_index,
+ [in] HRESULT status);
+}
+
interface IMFMediaSource;
[
@@ -138,6 +159,32 @@ interface IMFSourceReader : IUnknown
HRESULT GetPresentationAttribute([in] DWORD index, [in] REFGUID guid, [out] PROPVARIANT *attr);
}
+[
+ object,
+ uuid(7b981cf0-560e-4116-9875-b099895f23d7),
+ local
+]
+interface IMFSourceReaderEx : IMFSourceReader
+{
+ HRESULT SetNativeMediaType(
+ [in] DWORD stream_index,
+ [in] IMFMediaType *media_type,
+ [out] DWORD *stream_flags);
+
+ HRESULT AddTransformForStream(
+ [in] DWORD stream_index,
+ [in] IUnknown *transform);
+
+ HRESULT RemoveAllTransformsForStream(
+ [in] DWORD stream_index);
+
+ HRESULT GetTransformForStream(
+ [in] DWORD stream_index,
+ [in] DWORD transform_index,
+ [out] GUID *category,
+ [out] IMFTransform **transform);
+}
+
[
object,
uuid(3137f1cd-fe5e-4805-a5d8-fb477448cb3d),
@@ -169,6 +216,52 @@ interface IMFSinkWriterEx : IMFSinkWriter
[out] IMFTransform **transform);
}
+[
+ object,
+ uuid(17c3779e-3cde-4ede-8c60-3899f5f53ad6),
+ local
+]
+interface IMFSinkWriterEncoderConfig : IUnknown
+{
+ HRESULT SetTargetMediaType(
+ [in] DWORD stream_index,
+ [in] IMFMediaType *media_type,
+ [in] IMFAttributes *encoding_parameters);
+
+ HRESULT PlaceEncodingParameters(
+ [in] DWORD stream_index,
+ [in] IMFAttributes *encoding_parameters);
+}
+
+[
+ object,
+ uuid(666f76de-33d2-41b9-a458-29ed0a972c58),
+ local
+]
+interface IMFSinkWriterCallback : IUnknown
+{
+ HRESULT OnFinalize(
+ [in] HRESULT status);
+
+ HRESULT OnMarker(
+ [in] DWORD stream_index,
+ [in] void *context);
+}
+
+[
+ object,
+ uuid(2456bd58-c067-4513-84fe-8d0c88ffdc61),
+ local
+]
+interface IMFSinkWriterCallback2 : IMFSinkWriterCallback
+{
+ HRESULT OnTransformChange();
+
+ HRESULT OnStreamError(
+ [in] DWORD stream_index,
+ [in] HRESULT status);
+}
+
[
object,
uuid(e7fe2e12-661c-40da-92f9-4f002ab67627),
--
2.23.0
1
0
[PATCH 1/5] strmbase: Get rid of the "pfnGetClassWindowStyles" callback.
by Zebediah Figura 17 Oct '19
by Zebediah Figura 17 Oct '19
17 Oct '19
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/quartz/videorenderer.c | 18 ++++--------------
dlls/quartz/vmr9.c | 12 ------------
dlls/strmbase/window.c | 22 ++++++----------------
include/wine/strmbase.h | 6 ------
4 files changed, 10 insertions(+), 48 deletions(-)
diff --git a/dlls/quartz/videorenderer.c b/dlls/quartz/videorenderer.c
index 87491d8851c..a16a422e2d5 100644
--- a/dlls/quartz/videorenderer.c
+++ b/dlls/quartz/videorenderer.c
@@ -53,6 +53,8 @@ typedef struct VideoRendererImpl
LONG VideoWidth;
LONG VideoHeight;
LONG FullScreenMode;
+
+ DWORD saved_style;
} VideoRendererImpl;
static inline VideoRendererImpl *impl_from_BaseWindow(BaseWindow *iface)
@@ -392,17 +394,6 @@ static void video_renderer_start_stream(BaseRenderer *iface)
}
}
-static LPWSTR WINAPI VideoRenderer_GetClassWindowStyles(BaseWindow *This, DWORD *pClassStyles, DWORD *pWindowStyles, DWORD *pWindowStylesEx)
-{
- static const WCHAR classnameW[] = { 'W','i','n','e',' ','A','c','t','i','v','e','M','o','v','i','e',' ','C','l','a','s','s',0 };
-
- *pClassStyles = 0;
- *pWindowStyles = WS_SIZEBOX;
- *pWindowStylesEx = 0;
-
- return (LPWSTR)classnameW;
-}
-
static RECT WINAPI VideoRenderer_GetDefaultRect(BaseWindow *iface)
{
VideoRendererImpl *This = impl_from_BaseWindow(iface);
@@ -441,7 +432,6 @@ static const BaseRendererFuncTable BaseFuncTable =
};
static const BaseWindowFuncTable renderer_BaseWindowFuncTable = {
- VideoRenderer_GetClassWindowStyles,
VideoRenderer_GetDefaultRect,
VideoRenderer_OnSize
};
@@ -674,7 +664,7 @@ static HRESULT WINAPI VideoWindow_put_FullScreenMode(IVideoWindow *iface,
FIXME("(%p/%p)->(%d): stub !!!\n", This, iface, FullScreenMode);
if (FullScreenMode) {
- This->baseControlWindow.baseWindow.WindowStyles = GetWindowLongW(This->baseControlWindow.baseWindow.hWnd, GWL_STYLE);
+ This->saved_style = GetWindowLongW(This->baseControlWindow.baseWindow.hWnd, GWL_STYLE);
ShowWindow(This->baseControlWindow.baseWindow.hWnd, SW_HIDE);
SetParent(This->baseControlWindow.baseWindow.hWnd, 0);
SetWindowLongW(This->baseControlWindow.baseWindow.hWnd, GWL_STYLE, WS_POPUP);
@@ -684,7 +674,7 @@ static HRESULT WINAPI VideoWindow_put_FullScreenMode(IVideoWindow *iface,
} else {
ShowWindow(This->baseControlWindow.baseWindow.hWnd, SW_HIDE);
SetParent(This->baseControlWindow.baseWindow.hWnd, This->baseControlWindow.hwndOwner);
- SetWindowLongW(This->baseControlWindow.baseWindow.hWnd, GWL_STYLE, This->baseControlWindow.baseWindow.WindowStyles);
+ SetWindowLongW(This->baseControlWindow.baseWindow.hWnd, GWL_STYLE, This->saved_style);
GetClientRect(This->baseControlWindow.baseWindow.hWnd, &This->DestRect);
SetWindowPos(This->baseControlWindow.baseWindow.hWnd,0,This->DestRect.left,This->DestRect.top,This->DestRect.right,This->DestRect.bottom,SWP_NOZORDER|SWP_SHOWWINDOW);
This->WindowPos = This->DestRect;
diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c
index d3fdfb13a39..536703fbff1 100644
--- a/dlls/quartz/vmr9.c
+++ b/dlls/quartz/vmr9.c
@@ -568,17 +568,6 @@ static const BaseRendererFuncTable BaseFuncTable =
.renderer_pin_query_interface = vmr_pin_query_interface,
};
-static LPWSTR WINAPI VMR9_GetClassWindowStyles(BaseWindow *This, DWORD *pClassStyles, DWORD *pWindowStyles, DWORD *pWindowStylesEx)
-{
- static WCHAR classnameW[] = { 'I','V','M','R','9',' ','C','l','a','s','s', 0 };
-
- *pClassStyles = 0;
- *pWindowStyles = WS_SIZEBOX;
- *pWindowStylesEx = 0;
-
- return classnameW;
-}
-
static RECT WINAPI VMR9_GetDefaultRect(BaseWindow *This)
{
struct quartz_vmr* pVMR9 = impl_from_BaseWindow(This);
@@ -604,7 +593,6 @@ static BOOL WINAPI VMR9_OnSize(BaseWindow *This, LONG Width, LONG Height)
}
static const BaseWindowFuncTable renderer_BaseWindowFuncTable = {
- VMR9_GetClassWindowStyles,
VMR9_GetDefaultRect,
VMR9_OnSize,
};
diff --git a/dlls/strmbase/window.c b/dlls/strmbase/window.c
index fbf0edc78c5..142336bc193 100644
--- a/dlls/strmbase/window.c
+++ b/dlls/strmbase/window.c
@@ -110,33 +110,24 @@ HRESULT WINAPI BaseWindow_Destroy(BaseWindow *This)
HRESULT WINAPI BaseWindowImpl_PrepareWindow(BaseWindow *This)
{
- WNDCLASSW winclass;
+ static const WCHAR class_nameW[] = {'w','i','n','e','_','s','t','r','m','b','a','s','e','_','w','i','n','d','o','w',0};
static const WCHAR windownameW[] = { 'A','c','t','i','v','e','M','o','v','i','e',' ','W','i','n','d','o','w',0 };
+ WNDCLASSW winclass = {0};
- This->pClassName = This->pFuncsTable->pfnGetClassWindowStyles(This, &This->ClassStyles, &This->WindowStyles, &This->WindowStylesEx);
-
- winclass.style = This->ClassStyles;
winclass.lpfnWndProc = WndProcW;
- winclass.cbClsExtra = 0;
winclass.cbWndExtra = sizeof(BaseWindow*);
winclass.hInstance = This->hInstance;
- winclass.hIcon = NULL;
- winclass.hCursor = NULL;
winclass.hbrBackground = GetStockObject(BLACK_BRUSH);
- winclass.lpszMenuName = NULL;
- winclass.lpszClassName = This->pClassName;
+ winclass.lpszClassName = class_nameW;
if (!RegisterClassW(&winclass) && GetLastError() != ERROR_CLASS_ALREADY_EXISTS)
{
ERR("Unable to register window class: %u\n", GetLastError());
return E_FAIL;
}
- This->hWnd = CreateWindowExW(This->WindowStylesEx,
- This->pClassName, windownameW,
- This->WindowStyles,
- CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
- CW_USEDEFAULT, NULL, NULL, This->hInstance,
- NULL);
+ This->hWnd = CreateWindowExW(0, class_nameW, windownameW, WS_SIZEBOX,
+ CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
+ NULL, NULL, This->hInstance, NULL);
if (!This->hWnd)
{
@@ -305,7 +296,6 @@ HRESULT WINAPI BaseControlWindowImpl_put_WindowStyle(IVideoWindow *iface, LONG W
SetWindowLongW(This->baseWindow.hWnd, GWL_STYLE, WindowStyle);
SetWindowPos(This->baseWindow.hWnd, 0, 0, 0, 0, 0,
SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);
- This->baseWindow.WindowStyles = WindowStyle;
return S_OK;
}
diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h
index 34a558ab8e8..11397170edc 100644
--- a/include/wine/strmbase.h
+++ b/include/wine/strmbase.h
@@ -360,23 +360,17 @@ typedef struct tagBaseWindow
LONG Width;
LONG Height;
HINSTANCE hInstance;
- LPWSTR pClassName;
- DWORD ClassStyles;
- DWORD WindowStyles;
- DWORD WindowStylesEx;
HDC hDC;
const struct BaseWindowFuncTable* pFuncsTable;
} BaseWindow;
-typedef LPWSTR (WINAPI *BaseWindow_GetClassWindowStyles)(BaseWindow *This, DWORD *pClassStyles, DWORD *pWindowStyles, DWORD *pWindowStylesEx);
typedef RECT (WINAPI *BaseWindow_GetDefaultRect)(BaseWindow *This);
typedef BOOL (WINAPI *BaseWindow_OnSize)(BaseWindow *This, LONG Height, LONG Width);
typedef struct BaseWindowFuncTable
{
/* Required */
- BaseWindow_GetClassWindowStyles pfnGetClassWindowStyles;
BaseWindow_GetDefaultRect pfnGetDefaultRect;
/* Optional, WinProc Related */
BaseWindow_OnSize pfnOnSize;
--
2.23.0
1
4
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
---
include/Makefile.in | 1 +
include/sapi.idl | 2 +
include/sapiaut.idl | 2007 +++++++++++++++++++++++++++++++++++++++++++
3 files changed, 2010 insertions(+)
create mode 100644 include/sapiaut.idl
diff --git a/include/Makefile.in b/include/Makefile.in
index 7832d64a0e..d4676f0fdd 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -574,6 +574,7 @@ SOURCES = \
rtutils.h \
sal.h \
sapi.idl \
+ sapiaut.idl \
sapiddk.idl \
scarderr.h \
schannel.h \
diff --git a/include/sapi.idl b/include/sapi.idl
index d6f904f29a..8e591bd3a0 100644
--- a/include/sapi.idl
+++ b/include/sapi.idl
@@ -1025,6 +1025,8 @@ library SpeechLib
{
importlib("stdole2.tlb");
+ #include "sapiaut.idl"
+
[
uuid(a910187f-0c7a-45ac-92cc-59edafb77b53),
helpstring("SpObjectTokenCategory Class"),
diff --git a/include/sapiaut.idl b/include/sapiaut.idl
new file mode 100644
index 0000000000..41bd32030f
--- /dev/null
+++ b/include/sapiaut.idl
@@ -0,0 +1,2007 @@
+/*
+ * Copyright (C) 2019 Alistair Leslie-Hughes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+#if 0
+#pragma makedep install
+#endif
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+interface ISpeechAudioFormat;
+interface ISpeechGrammarRule;
+interface ISpeechGrammarRuleState;
+interface ISpeechObjectTokens;
+interface ISpeechPhraseProperties;
+interface ISpeechPhraseRule;
+interface ISpeechRecognizer;
+interface ISpeechRecoContext;
+interface ISpeechRecoGrammar;
+interface ISpeechRecoResult;
+
+typedef long SpeechLanguageId;
+
+typedef enum SpeechLoadOption
+{
+ SLOStatic = SPLO_STATIC,
+ SLODynamic = SPLO_DYNAMIC
+} SpeechLoadOption;
+
+typedef enum SpeechRuleState
+{
+ SGDSInactive = SPRS_INACTIVE,
+ SGDSActive = SPRS_ACTIVE,
+ SGDSActiveWithAutoPause = SPRS_ACTIVE_WITH_AUTO_PAUSE,
+ SGDSActiveUserDelimited = SPRS_ACTIVE_USER_DELIMITED
+} SpeechRuleState;
+
+typedef enum SpeechTokenShellFolder
+{
+ STSF_AppData = 0x001a,
+ STSF_LocalAppData = 0x001c,
+ STSF_CommonAppData = 0x0023,
+ STSF_FlagCreate = 0x8000
+} SpeechTokenShellFolder;
+
+typedef enum SpeechEngineConfidence
+{
+ SECLowConfidence = -1,
+ SECNormalConfidence = 0,
+ SECHighConfidence = 1
+} SpeechEngineConfidence;
+
+typedef enum SpeechAudioState
+{
+ SASClosed = SPAS_CLOSED,
+ SASStop = SPAS_STOP,
+ SASPause = SPAS_PAUSE,
+ SASRun = SPAS_RUN
+} SpeechAudioState;
+
+typedef enum SpeechRunState
+{
+ SRSEDone = SPRS_DONE,
+ SRSEIsSpeaking = SPRS_IS_SPEAKING
+} SpeechRunState;
+
+typedef enum SpeechDiscardType
+{
+ SDTProperty = SPDF_PROPERTY,
+ SDTReplacement = SPDF_REPLACEMENT,
+ SDTRule = SPDF_RULE,
+ SDTDisplayText = SPDF_DISPLAYTEXT,
+ SDTLexicalForm = SPDF_LEXICALFORM,
+ SDTPronunciation = SPDF_PRONUNCIATION,
+ SDTAudio = SPDF_AUDIO,
+ SDTAlternates = SPDF_ALTERNATES,
+ SDTAll = SPDF_ALL
+} SpeechDiscardType;
+
+typedef enum SpeechRecognizerState
+{
+ SRSInactive = SPRST_INACTIVE,
+ SRSActive = SPRST_ACTIVE,
+ SRSActiveAlways = SPRST_ACTIVE_ALWAYS,
+ SRSInactiveWithPurge = SPRST_INACTIVE_WITH_PURGE,
+} SpeechRecognizerState;
+
+typedef enum SpeechDisplayAttributes
+{
+ SDA_No_Trailing_Space = 0,
+ SDA_One_Trailing_Space = SPAF_ONE_TRAILING_SPACE,
+ SDA_Two_Trailing_Spaces = SPAF_TWO_TRAILING_SPACES,
+ SDA_Consume_Leading_Spaces = SPAF_CONSUME_LEADING_SPACES
+} SpeechDisplayAttributes;
+
+typedef enum SpeechFormatType
+{
+ SFTInput = SPWF_INPUT,
+ SFTSREngine = SPWF_SRENGINE
+} SpeechFormatType;
+
+typedef enum SpeechGrammarState
+{
+ SGSEnabled = SPGS_ENABLED,
+ SGSDisabled = SPGS_DISABLED,
+ SGSExclusive = SPGS_EXCLUSIVE,
+} SpeechGrammarState;
+
+typedef enum SpeechRuleAttributes
+{
+ SRATopLevel = SPRAF_TopLevel,
+ SRADefaultToActive = SPRAF_Active,
+ SRAExport = SPRAF_Export,
+ SRAImport = SPRAF_Import,
+ SRAInterpreter = SPRAF_Interpreter,
+ SRADynamic = SPRAF_Dynamic,
+ SRARoot = SPRAF_Root
+} SpeechRuleAttributes;
+
+typedef enum SpeechWordPronounceable
+{
+ SWPUnknownWordUnpronounceable = SPWP_UNKNOWN_WORD_UNPRONOUNCEABLE,
+ SWPUnknownWordPronounceable = SPWP_UNKNOWN_WORD_PRONOUNCEABLE,
+ SWPKnownWordPronounceable = SPWP_KNOWN_WORD_PRONOUNCEABLE
+} SpeechWordPronounceable;
+
+typedef enum SpeechSpecialTransitionType
+{
+ SSTTWildcard = 1,
+ SSTTDictation,
+ SSTTTextBuffer
+} SpeechSpecialTransitionType;
+
+typedef [hidden] enum DISPID_SpeechRecoContext
+{
+ DISPID_SRCRecognizer = 1,
+ DISPID_SRCAudioInInterferenceStatus,
+ DISPID_SRCRequestedUIType,
+ DISPID_SRCVoice,
+ DISPID_SRAllowVoiceFormatMatchingOnNextSet,
+ DISPID_SRCVoicePurgeEvent,
+ DISPID_SRCEventInterests,
+ DISPID_SRCCmdMaxAlternates,
+ DISPID_SRCState,
+ DISPID_SRCRetainedAudio,
+ DISPID_SRCRetainedAudioFormat,
+ DISPID_SRCPause,
+ DISPID_SRCResume,
+ DISPID_SRCCreateGrammar,
+ DISPID_SRCCreateResultFromMemory,
+ DISPID_SRCBookmark,
+ DISPID_SRCSetAdaptationData
+} DISPID_SpeechRecoContext;
+
+typedef [hidden] enum DISPID_SpeechDataKey
+{
+ DISPID_SDKSetBinaryValue = 1,
+ DISPID_SDKGetBinaryValue,
+ DISPID_SDKSetStringValue,
+ DISPID_SDKGetStringValue,
+ DISPID_SDKSetLongValue,
+ DISPID_SDKGetlongValue,
+ DISPID_SDKOpenKey,
+ DISPID_SDKCreateKey,
+ DISPID_SDKDeleteKey,
+ DISPID_SDKDeleteValue,
+ DISPID_SDKEnumKeys,
+ DISPID_SDKEnumValues
+} DISPID_SpeechDataKey;
+
+typedef [hidden] enum DISPIDSPRG
+{
+ DISPID_SRGId = 1,
+ DISPID_SRGRecoContext,
+ DISPID_SRGState,
+ DISPID_SRGRules,
+ DISPID_SRGReset,
+ DISPID_SRGCommit,
+ DISPID_SRGCmdLoadFromFile,
+ DISPID_SRGCmdLoadFromObject,
+ DISPID_SRGCmdLoadFromResource,
+ DISPID_SRGCmdLoadFromMemory,
+ DISPID_SRGCmdLoadFromProprietaryGrammar,
+ DISPID_SRGCmdSetRuleState,
+ DISPID_SRGCmdSetRuleIdState,
+ DISPID_SRGDictationLoad,
+ DISPID_SRGDictationUnload,
+ DISPID_SRGDictationSetState,
+ DISPID_SRGSetWordSequenceData,
+ DISPID_SRGSetTextSelection,
+ DISPID_SRGIsPronounceable
+} DISPIDSPRG;
+
+typedef enum SpeechInterference
+{
+ SINone = SPINTERFERENCE_NONE,
+ SINoise = SPINTERFERENCE_NOISE,
+ SINoSignal = SPINTERFERENCE_NOSIGNAL,
+ SITooLoud = SPINTERFERENCE_TOOLOUD,
+ SITooQuiet = SPINTERFERENCE_TOOQUIET,
+ SITooFast = SPINTERFERENCE_TOOFAST,
+ SITooSlow = SPINTERFERENCE_TOOSLOW
+} SpeechInterference;
+
+typedef enum SpeechVoiceEvents
+{
+ SVEStartInputStream = (1L << 1),
+ SVEEndInputStream = (1L << 2),
+ SVEVoiceChange = (1L << 3),
+ SVEBookmark = (1L << 4),
+ SVEWordBoundary = (1L << 5),
+ SVEPhoneme = (1L << 6),
+ SVESentenceBoundary = (1L << 7),
+ SVEViseme = (1L << 8),
+ SVEAudioLevel = (1L << 9),
+ SVEPrivate = (1L << 15),
+ SVEAllEvents = 0x083FE
+} SpeechVoiceEvents;
+
+typedef enum SpeechVoiceSpeakFlags
+{
+ SVSFDefault = SPF_DEFAULT,
+ SVSFlagsAsync = SPF_ASYNC,
+ SVSFPurgeBeforeSpeak = SPF_PURGEBEFORESPEAK,
+ SVSFIsFilename = SPF_IS_FILENAME,
+ SVSFIsXML = SPF_IS_XML,
+ SVSFIsNotXML = SPF_IS_NOT_XML,
+ SVSFPersistXML = SPF_PERSIST_XML,
+ SVSFNLPSpeakPunc = SPF_NLP_SPEAK_PUNC,
+ SVSFParseSapi = SPF_PARSE_SAPI,
+ SVSFParseSsml = SPF_PARSE_SSML,
+ SVSFParseAutodetect = SPF_PARSE_AUTODETECT,
+ SVSFNLPMask = SPF_NLP_MASK,
+ SVSFParseMask = SPF_PARSE_MASK,
+ SVSFVoiceMask = SPF_VOICE_MASK,
+ SVSFUnusedFlags = SPF_UNUSED_FLAGS,
+} SpeechVoiceSpeakFlags;
+
+typedef enum SpeechGrammarWordType
+{
+ SGDisplay = SPWT_DISPLAY,
+ SGLexical = SPWT_LEXICAL,
+ SGPronounciation = SPWT_PRONUNCIATION,
+ SGLexicalNoSpecialChars = SPWT_LEXICAL_NO_SPECIAL_CHARS
+} SpeechGrammarWordType;
+
+typedef enum SpeechRecoEvents
+{
+ SREStreamEnd = (1L << 0),
+ SRESoundStart = (1L << 1),
+ SRESoundEnd = (1L << 2),
+ SREPhraseStart = (1L << 3),
+ SRERecognition = (1L << 4),
+ SREHypothesis = (1L << 5),
+ SREBookmark = (1L << 6),
+ SREPropertyNumChange = (1L << 7),
+ SREPropertyStringChange = (1L << 8),
+ SREFalseRecognition = (1L << 9),
+ SREInterference = (1L << 10),
+ SRERequestUI = (1L << 11),
+ SREStateChange = (1L << 12),
+ SREAdaptation = (1L << 13),
+ SREStreamStart = (1L << 14),
+ SRERecoOtherContext = (1L << 15),
+ SREAudioLevel = (1L << 16),
+ SREPrivate = (1L << 18),
+ SREAllEvents = 0x5FFFF
+} SpeechRecoEvents;
+
+typedef enum SpeechRecoContextState
+{
+ SRCS_Disabled = SPCS_DISABLED,
+ SRCS_Enabled = SPCS_ENABLED
+} SpeechRecoContextState;
+
+typedef enum SpeechRetainedAudioOptions
+{
+ SRAONone = SPAO_NONE,
+ SRAORetainAudio = SPAO_RETAIN_AUDIO
+} SpeechRetainedAudioOptions;
+
+typedef enum SpeechVoicePriority
+{
+ SVPNormal = SPVPRI_NORMAL,
+ SVPAlert = SPVPRI_ALERT,
+ SVPOver = SPVPRI_OVER
+} SpeechVoicePriority;
+
+[
+ object,
+ uuid(ce17c09b-4efa-44d5-a4c9-59d9585ab0cd),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechDataKey : IDispatch
+{
+ [id(DISPID_SDKSetBinaryValue)]
+ HRESULT SetBinaryValue([in] const BSTR name, [in] VARIANT value);
+
+ [id(DISPID_SDKGetBinaryValue)]
+ HRESULT GetBinaryValue([in] const BSTR name, [out,retval] VARIANT *value);
+
+ [id(DISPID_SDKSetStringValue)]
+ HRESULT SetStringValue([in] const BSTR name, [in]const BSTR value);
+
+ [id(DISPID_SDKGetStringValue)]
+ HRESULT GetStringValue([in] const BSTR name, [out,retval] BSTR* value);
+
+ [id(DISPID_SDKSetLongValue)]
+ HRESULT SetLongValue([in] const BSTR name, [in] long value);
+
+ [id(DISPID_SDKGetlongValue)]
+ HRESULT GetLongValue([in] const BSTR name, [out,retval] long *value);
+
+ [id(DISPID_SDKOpenKey)]
+ HRESULT OpenKey( [in] const BSTR name, [out,retval] ISpeechDataKey **key);
+
+ [id(DISPID_SDKCreateKey)]
+ HRESULT CreateKey([in] const BSTR name, [out,retval] ISpeechDataKey **key);
+
+ [id(DISPID_SDKDeleteKey)]
+ HRESULT DeleteKey([in] const BSTR name);
+
+ [id(DISPID_SDKDeleteValue)]
+ HRESULT DeleteValue([in] const BSTR name);
+
+ [id(DISPID_SDKEnumKeys)]
+ HRESULT EnumKeys([in] long index, [out,retval] BSTR *name);
+
+ [id(DISPID_SDKEnumValues)]
+ HRESULT EnumValues([in] long Index, [out,retval] BSTR *value);
+};
+
+typedef enum SpeechDataKeyLocation
+{
+ SDKLDefaultLocation = 0,
+ SDKLCurrentUser = 1,
+ SDKLLocalMachine = 2,
+ SDKLCurrentConfig = 5
+} SpeechDataKeyLocation;
+
+typedef enum SpeechBookmarkOptions
+{
+ SBONone = SPBO_NONE,
+ SBOPause = SPBO_PAUSE
+} SpeechBookmarkOptions;
+
+#define CLSCTXALL (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)
+
+typedef enum SpeechTokenContext
+{
+ STCInprocServer = CLSCTX_INPROC_SERVER,
+ STCInprocHandler = CLSCTX_INPROC_HANDLER,
+ STCLocalServer = CLSCTX_LOCAL_SERVER,
+ STCRemoteServer = CLSCTX_REMOTE_SERVER,
+ STCAll = CLSCTXALL
+} SpeechTokenContext;
+
+typedef [hidden] enum DISPID_SpeechObjectTokenCategory
+{
+ DISPID_SOTCId = 1,
+ DISPID_SOTCDefault,
+ DISPID_SOTCSetId,
+ DISPID_SOTCGetDataKey,
+ DISPID_SOTCEnumerateTokens,
+} DISPID_SpeechObjectTokenCategory;
+
+[
+ object,
+ uuid(ca7eac50-2d01-4145-86d4-5ae7d70f4469),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechObjectTokenCategory : IDispatch
+{
+ [propget, id(DISPID_SOTCId)]
+ HRESULT Id([out, retval] BSTR *id);
+
+ [propput, id(DISPID_SOTCDefault)]
+ HRESULT Default([in] const BSTR token);
+ [propget, id(DISPID_SOTCDefault)]
+ HRESULT Default([out, retval] BSTR *token);
+
+ [id(DISPID_SOTCSetId)]
+ HRESULT SetId([in] const BSTR id, [in, defaultvalue(0)] VARIANT_BOOL created);
+
+ [hidden, id(DISPID_SOTCGetDataKey)]
+ HRESULT GetDataKey([in, defaultvalue(SDKLDefaultLocation)] SpeechDataKeyLocation location,
+ [out, retval] ISpeechDataKey **key);
+
+ [id(DISPID_SOTCEnumerateTokens)]
+ HRESULT EnumerateTokens([in, defaultvalue("")] BSTR required,
+ [in, defaultvalue("")] BSTR optional,
+ [out, retval] ISpeechObjectTokens **tokens);
+};
+
+typedef [hidden] enum DISPID_SpeechObjectToken
+{
+ DISPID_SOTId = 1,
+ DISPID_SOTDataKey,
+ DISPID_SOTCategory,
+ DISPID_SOTGetDescription,
+ DISPID_SOTSetId,
+ DISPID_SOTGetAttribute,
+ DISPID_SOTCreateInstance,
+ DISPID_SOTRemove,
+ DISPID_SOTGetStorageFileName,
+ DISPID_SOTRemoveStorageFileName,
+ DISPID_SOTIsUISupported,
+ DISPID_SOTDisplayUI,
+ DISPID_SOTMatchesAttributes
+} DISPID_SpeechObjectToken;
+
+[
+ object,
+ uuid(c74a3adc-b727-4500-a84a-b526721c8b8c),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechObjectToken : IDispatch
+{
+ [propget, id(DISPID_SOTId)]
+ HRESULT Id([out,retval] BSTR *object);
+
+ [propget, id(DISPID_SOTDataKey), hidden]
+ HRESULT DataKey([out,retval] ISpeechDataKey **key);
+
+ [propget, id(DISPID_SOTCategory)]
+ HRESULT Category([out,retval] ISpeechObjectTokenCategory **category);
+
+ [id(DISPID_SOTGetDescription)]
+ HRESULT GetDescription( [in,defaultvalue(0)] long locale, [out,retval]BSTR *description);
+
+ [hidden, id(DISPID_SOTSetId)]
+ HRESULT SetId([in] BSTR id, [in, defaultvalue("")] BSTR category, [in, defaultvalue(0)] VARIANT_BOOL create);
+
+ [id(DISPID_SOTGetAttribute)]
+ HRESULT GetAttribute([in] BSTR name, [out, retval] BSTR* value);
+
+ [id(DISPID_SOTCreateInstance)]
+ HRESULT CreateInstance([in, defaultvalue(NULL)] IUnknown *outer, [in, defaultvalue(STCAll)] SpeechTokenContext spcontext,
+ [out, retval] IUnknown **object);
+
+ [hidden, id(DISPID_SOTRemove)]
+ HRESULT Remove([in] BSTR clsid);
+
+ [hidden, id(DISPID_SOTGetStorageFileName)]
+ HRESULT GetStorageFileName([in] BSTR clsid, [in] BSTR key, [in] BSTR name, [in] SpeechTokenShellFolder folder,
+ [out,retval] BSTR* path);
+
+ [hidden, id(DISPID_SOTRemoveStorageFileName)]
+ HRESULT RemoveStorageFileName([in] BSTR clsid, [in]BSTR key, [in] VARIANT_BOOL delete);
+
+ [hidden, id(DISPID_SOTIsUISupported)]
+ HRESULT IsUISupported( [in]const BSTR type, [in, defaultvalue(NULL)] const VARIANT *data,
+ [in, defaultvalue(NULL)] IUnknown *object,
+ [out,retval] VARIANT_BOOL *supported);
+
+ [hidden, id(DISPID_SOTDisplayUI)]
+ HRESULT DisplayUI([in] long hwnd, [in] BSTR title, [in]const BSTR type,
+ [in, defaultvalue(NULL)] const VARIANT *data,
+ [in, defaultvalue(NULL)] IUnknown *object);
+
+ [id(DISPID_SOTMatchesAttributes)]
+ HRESULT MatchesAttributes([in] BSTR attributes, [out,retval] VARIANT_BOOL *matches);
+};
+
+typedef [hidden] enum DISPID_SpeechObjectTokens
+{
+ DISPID_SOTsCount = 1,
+ DISPID_SOTsItem = DISPID_VALUE,
+ DISPID_SOTs_NewEnum = DISPID_NEWENUM
+} DISPID_SpeechObjectTokens;
+
+[
+ object,
+ uuid(9285b776-2e7b-4bc0-b53e-580eb6fa967f),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechObjectTokens : IDispatch
+{
+ [propget, id(DISPID_SOTsCount)]
+ HRESULT Count([out, retval] long* count);
+
+ [id(DISPID_VALUE)]
+ HRESULT Item([in] long index, [out, retval] ISpeechObjectToken **token);
+
+ [propget, restricted, id(DISPID_NEWENUM)]
+ HRESULT _NewEnum([out, retval] IUnknown **ppenum);
+};
+
+typedef [hidden] enum DISPID_SpeechWaveFormatEx
+{
+ DISPID_SWFEFormatTag = 1,
+ DISPID_SWFEChannels,
+ DISPID_SWFESamplesPerSec,
+ DISPID_SWFEAvgBytesPerSec,
+ DISPID_SWFEBlockAlign,
+ DISPID_SWFEBitsPerSample,
+ DISPID_SWFEExtraData
+} DISPID_SpeechWaveFormatEx;
+
+[
+ object,
+ uuid(7a1ef0d5-1581-4741-88e4-209a49f11a10),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechWaveFormatEx : IDispatch
+{
+ [propget, id(DISPID_SWFEFormatTag)]
+ HRESULT FormatTag([out,retval] short *tag);
+ [propput, id(DISPID_SWFEFormatTag)]
+ HRESULT FormatTag([in] short tag);
+
+ [propget, id(DISPID_SWFEChannels)]
+ HRESULT Channels([out,retval] short *channels);
+ [propput, id(DISPID_SWFEChannels)]
+ HRESULT Channels([in] short channels);
+
+ [propget, id(DISPID_SWFESamplesPerSec)]
+ HRESULT SamplesPerSec([out,retval] long * samples);
+ [propput, id(DISPID_SWFESamplesPerSec)]
+ HRESULT SamplesPerSec([in] long samples);
+
+ [propget, id(DISPID_SWFEAvgBytesPerSec)]
+ HRESULT AvgBytesPerSec([out,retval] long *average);
+ [propput, id(DISPID_SWFEAvgBytesPerSec)]
+ HRESULT AvgBytesPerSec([in] long average);
+
+ [propget, id(DISPID_SWFEBlockAlign)]
+ HRESULT BlockAlign([out,retval] short *alignment);
+ [propput, id(DISPID_SWFEBlockAlign)]
+ HRESULT BlockAlign([in] short alignment);
+
+ [propget, id(DISPID_SWFEBitsPerSample)]
+ HRESULT BitsPerSample([out,retval] short *bits);
+ [propput, id(DISPID_SWFEBitsPerSample)]
+ HRESULT BitsPerSample([in] short bits);
+
+ [propget, id(DISPID_SWFEExtraData)]
+ HRESULT ExtraData([out,retval] VARIANT *data);
+ [propput, id(DISPID_SWFEExtraData)]
+ HRESULT ExtraData([in] VARIANT data);
+}
+
+typedef enum SpeechAudioFormatType
+{
+ SAFTDefault = -1,
+ SAFTNoAssignedFormat = 0,
+ SAFTText,
+ SAFTNonStandardFormat,
+ SAFTExtendedAudioFormat,
+ SAFT8kHz8BitMono,
+ SAFT8kHz8BitStereo,
+ SAFT8kHz16BitMono,
+ SAFT8kHz16BitStereo,
+ SAFT11kHz8BitMono,
+ SAFT11kHz8BitStereo,
+ SAFT11kHz16BitMono,
+ SAFT11kHz16BitStereo,
+ SAFT12kHz8BitMono,
+ SAFT12kHz8BitStereo,
+ SAFT12kHz16BitMono,
+ SAFT12kHz16BitStereo,
+ SAFT16kHz8BitMono,
+ SAFT16kHz8BitStereo,
+ SAFT16kHz16BitMono,
+ SAFT16kHz16BitStereo,
+ SAFT22kHz8BitMono,
+ SAFT22kHz8BitStereo,
+ SAFT22kHz16BitMono,
+ SAFT22kHz16BitStereo,
+ SAFT24kHz8BitMono,
+ SAFT24kHz8BitStereo,
+ SAFT24kHz16BitMono,
+ SAFT24kHz16BitStereo,
+ SAFT32kHz8BitMono,
+ SAFT32kHz8BitStereo,
+ SAFT32kHz16BitMono,
+ SAFT32kHz16BitStereo,
+ SAFT44kHz8BitMono,
+ SAFT44kHz8BitStereo,
+ SAFT44kHz16BitMono,
+ SAFT44kHz16BitStereo,
+ SAFT48kHz8BitMono,
+ SAFT48kHz8BitStereo,
+ SAFT48kHz16BitMono,
+ SAFT48kHz16BitStereo,
+ SAFTTrueSpeech_8kHz1BitMono,
+ SAFTCCITT_ALaw_8kHzMono,
+ SAFTCCITT_ALaw_8kHzStereo,
+ SAFTCCITT_ALaw_11kHzMono,
+ SAFTCCITT_ALaw_11kHzStereo,
+ SAFTCCITT_ALaw_22kHzMono,
+ SAFTCCITT_ALaw_22kHzStereo,
+ SAFTCCITT_ALaw_44kHzMono,
+ SAFTCCITT_ALaw_44kHzStereo,
+ SAFTCCITT_uLaw_8kHzMono,
+ SAFTCCITT_uLaw_8kHzStereo,
+ SAFTCCITT_uLaw_11kHzMono,
+ SAFTCCITT_uLaw_11kHzStereo,
+ SAFTCCITT_uLaw_22kHzMono,
+ SAFTCCITT_uLaw_22kHzStereo,
+ SAFTCCITT_uLaw_44kHzMono,
+ SAFTCCITT_uLaw_44kHzStereo,
+ SAFTADPCM_8kHzMono,
+ SAFTADPCM_8kHzStereo,
+ SAFTADPCM_11kHzMono,
+ SAFTADPCM_11kHzStereo,
+ SAFTADPCM_22kHzMono,
+ SAFTADPCM_22kHzStereo,
+ SAFTADPCM_44kHzMono,
+ SAFTADPCM_44kHzStereo,
+ SAFTGSM610_8kHzMono,
+ SAFTGSM610_11kHzMono,
+ SAFTGSM610_22kHzMono,
+ SAFTGSM610_44kHzMono,
+} SpeechAudioFormatType;
+
+typedef [hidden] enum DISPID_SpeechAudioFormat
+{
+ DISPID_SAFType = 1,
+ DISPID_SAFGuid,
+ DISPID_SAFGetWaveFormatEx,
+ DISPID_SAFSetWaveFormatEx
+} DISPID_SpeechAudioFormat;
+
+[
+ object,
+ uuid(e6e9c590-3e18-40e3-8299-061f98bde7c7),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechAudioFormat : IDispatch
+{
+ [propget, id(DISPID_SAFType)]
+ HRESULT Type([out,retval] SpeechAudioFormatType *format);
+ [propput, id(DISPID_SAFType)]
+ HRESULT Type([in] SpeechAudioFormatType format);
+
+ [propget, hidden, id(DISPID_SAFGuid)]
+ HRESULT Guid([out,retval] BSTR *guid);
+ [propput, hidden, id(DISPID_SAFGuid)]
+ HRESULT Guid([in] BSTR guid);
+
+ [hidden, id(DISPID_SAFGetWaveFormatEx)]
+ HRESULT GetWaveFormatEx([out,retval] ISpeechWaveFormatEx **speechwave);
+
+ [hidden, id(DISPID_SAFSetWaveFormatEx)]
+ HRESULT SetWaveFormatEx([in] ISpeechWaveFormatEx *speechwave);
+}
+
+typedef enum SpeechStreamSeekPositionType
+{
+ SSSPTRelativeToStart = STREAM_SEEK_SET,
+ SSSPTRelativeToCurrentPosition = STREAM_SEEK_CUR,
+ SSSPTRelativeToEnd = STREAM_SEEK_END
+} SpeechStreamSeekPositionType;
+
+typedef [hidden] enum DISPID_SpeechBaseStream
+{
+ DISPID_SBSFormat = 1,
+ DISPID_SBSRead,
+ DISPID_SBSWrite,
+ DISPID_SBSSeek
+} DISPID_SpeechBaseStream;
+
+[
+ object,
+ uuid(6450336f-7d49-4ced-8097-49d6dee37294),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechBaseStream : IDispatch
+{
+ [propget, id(DISPID_SBSFormat)]
+ HRESULT Format([out,retval] ISpeechAudioFormat **format);
+ [propputref, id(DISPID_SBSFormat)]
+ HRESULT Format([in] ISpeechAudioFormat *format);
+
+ [id(DISPID_SBSRead)]
+ HRESULT Read([out] VARIANT *buffer, [in] long written, [out,retval] long *read);
+
+ [id(DISPID_SBSWrite)]
+ HRESULT Write([in] VARIANT buffer, [out,retval] long *written);
+
+ [id(DISPID_SBSSeek)]
+ HRESULT Seek([in] VARIANT position, [in, defaultvalue(SSSPTRelativeToStart)] SpeechStreamSeekPositionType origin,
+ [out,retval] VARIANT *pos);
+};
+
+typedef [hidden] enum DISPID_SpeechAudioStatus
+{
+ DISPID_SASFreeBufferSpace = 1,
+ DISPID_SASNonBlockingIO,
+ DISPID_SASState,
+ DISPID_SASCurrentSeekPosition,
+ DISPID_SASCurrentDevicePosition
+} DISPID_SpeechAudioStatus;
+
+[
+ object,
+ uuid(c62d9c91-7458-47f6-862d-1ef86fb0b278),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechAudioStatus : IDispatch
+{
+ [propget, id(DISPID_SASFreeBufferSpace)]
+ HRESULT FreeBufferSpace([out,retval] long *space);
+
+ [propget, id(DISPID_SASNonBlockingIO)]
+ HRESULT NonBlockingIO([out,retval] long *nonblocking);
+
+ [propget, id(DISPID_SASState)]
+ HRESULT State([out, retval] SpeechAudioState *state);
+
+ [propget, id(DISPID_SASCurrentSeekPosition)]
+ HRESULT CurrentSeekPosition([out,retval] VARIANT *position);
+
+ [propget, id(DISPID_SASCurrentDevicePosition)]
+ HRESULT CurrentDevicePosition([out,retval] VARIANT *position);
+};
+
+typedef [hidden] enum DISPID_SpeechRecognizerStatus
+{
+ DISPID_SRSAudioStatus = 1,
+ DISPID_SRSCurrentStreamPosition,
+ DISPID_SRSCurrentStreamNumber,
+ DISPID_SRSNumberOfActiveRules,
+ DISPID_SRSClsidEngine,
+ DISPID_SRSSupportedLanguages
+} DISPID_SpeechRecognizerStatus;
+
+[
+ object,
+ uuid(bff9e781-53ec-484e-bb8a-0e1b5551e35c),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechRecognizerStatus : IDispatch
+{
+ [propget, id(DISPID_SRSAudioStatus)]
+ HRESULT AudioStatus([out,retval] ISpeechAudioStatus **audio);
+
+ [propget, id(DISPID_SRSCurrentStreamPosition)]
+ HRESULT CurrentStreamPosition([out,retval] VARIANT *pos);
+
+ [propget, id(DISPID_SRSCurrentStreamNumber)]
+ HRESULT CurrentStreamNumber([out,retval] long *number);
+
+ [propget, id(DISPID_SRSNumberOfActiveRules)]
+ HRESULT NumberOfActiveRules([out,retval] long *rules);
+
+ [propget, id(DISPID_SRSClsidEngine)]
+ HRESULT ClsidEngine([out,retval] BSTR *clsid);
+
+ [propget, id(DISPID_SRSSupportedLanguages)]
+ HRESULT SupportedLanguages([out,retval] VARIANT *languages);
+};
+
+typedef [hidden] enum DISPID_SpeechVoiceStatus
+{
+ DISPID_SVSCurrentStreamNumber = 1,
+ DISPID_SVSLastStreamNumberQueued,
+ DISPID_SVSLastResult,
+ DISPID_SVSRunningState,
+ DISPID_SVSInputWordPosition,
+ DISPID_SVSInputWordLength,
+ DISPID_SVSInputSentencePosition,
+ DISPID_SVSInputSentenceLength,
+ DISPID_SVSLastBookmark,
+ DISPID_SVSLastBookmarkId,
+ DISPID_SVSPhonemeId,
+ DISPID_SVSVisemeId
+} DISPID_SpeechVoiceStatus;
+
+[
+ object,
+ uuid(8be47b07-57f6-11d2-9eee-00c04f797396),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechVoiceStatus : IDispatch
+{
+ [propget, id(DISPID_SVSCurrentStreamNumber)]
+ HRESULT CurrentStreamNumber([out, retval] long *number);
+
+ [propget, id(DISPID_SVSLastStreamNumberQueued)]
+ HRESULT LastStreamNumberQueued([out, retval] long *number);
+
+ [propget, id(DISPID_SVSLastResult)]
+ HRESULT LastHResult([out, retval]long *result);
+
+ [propget, id(DISPID_SVSRunningState)]
+ HRESULT RunningState([out, retval] SpeechRunState *state);
+
+ [propget, id(DISPID_SVSInputWordPosition)]
+ HRESULT InputWordPosition([out, retval] long *position);
+
+ [propget, id(DISPID_SVSInputWordLength)]
+ HRESULT InputWordLength([out, retval] long *length);
+
+ [propget, id(DISPID_SVSInputSentencePosition)]
+ HRESULT InputSentencePosition([out, retval] long *position);
+
+ [propget, id(DISPID_SVSInputSentenceLength)]
+ HRESULT InputSentenceLength([out, retval] long *length);
+
+ [propget, id(DISPID_SVSLastBookmark)]
+ HRESULT LastBookmark([out, retval] BSTR *bookmark);
+
+ [propget, id(DISPID_SVSLastBookmarkId), hidden]
+ HRESULT LastBookmarkId([out, retval] long *bookmark);
+
+ [propget, id(DISPID_SVSPhonemeId)]
+ HRESULT PhonemeId([out, retval] short *phone);
+
+ [propget, id(DISPID_SVSVisemeId)]
+ HRESULT VisemeId([out, retval] short *id);
+};
+
+typedef [hidden] enum DISPID_SpeechVoice
+{
+ DISPID_SVStatus = 1,
+ DISPID_SVVoice,
+ DISPID_SVAudioOutput,
+ DISPID_SVAudioOutputStream,
+ DISPID_SVRate,
+ DISPID_SVVolume,
+ DISPID_SVAllowAudioOuputFormatChangesOnNextSet,
+ DISPID_SVEventInterests,
+ DISPID_SVPriority,
+ DISPID_SVAlertBoundary,
+ DISPID_SVSyncronousSpeakTimeout,
+ DISPID_SVSpeak,
+ DISPID_SVSpeakStream,
+ DISPID_SVPause,
+ DISPID_SVResume,
+ DISPID_SVSkip,
+ DISPID_SVGetVoices,
+ DISPID_SVGetAudioOutputs,
+ DISPID_SVWaitUntilDone,
+ DISPID_SVSpeakCompleteEvent,
+ DISPID_SVIsUISupported,
+ DISPID_SVDisplayUI
+} DISPID_SpeechVoice;
+
+[
+ object,
+ uuid(269316d8-57bd-11d2-9eee-00c04f797396),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechVoice : IDispatch
+{
+ [propget, id(DISPID_SVStatus)]
+ HRESULT Status([out, retval] ISpeechVoiceStatus **Status);
+
+ [propget, id(DISPID_SVVoice)]
+ HRESULT Voice([out, retval] ISpeechObjectToken **voice);
+
+ [propputref, id(DISPID_SVVoice)]
+ HRESULT Voice([in] ISpeechObjectToken *voice);
+
+ [propget, id(DISPID_SVAudioOutput)]
+ HRESULT AudioOutput([out, retval] ISpeechObjectToken **output);
+
+ [propputref, id(DISPID_SVAudioOutput)]
+ HRESULT AudioOutput([in] ISpeechObjectToken *output);
+
+ [propget, id(DISPID_SVAudioOutputStream)]
+ HRESULT AudioOutputStream([out, retval] ISpeechBaseStream **output);
+
+ [propputref, id(DISPID_SVAudioOutputStream)]
+ HRESULT AudioOutputStream([in] ISpeechBaseStream *output);
+
+ [propget, id(DISPID_SVRate)]
+ HRESULT Rate([out, retval] long *rate);
+
+ [propput, id(DISPID_SVRate)]
+ HRESULT Rate([in] long rate);
+
+ [propget, id(DISPID_SVVolume)]
+ HRESULT Volume([out, retval] long *volume);
+
+ [propput, id(DISPID_SVVolume)]
+ HRESULT Volume([in] long volume);
+
+ [propput, hidden, id(DISPID_SVAllowAudioOuputFormatChangesOnNextSet)]
+ HRESULT AllowAudioOutputFormatChangesOnNextSet([in] VARIANT_BOOL allow);
+
+ [propget, hidden, id(DISPID_SVAllowAudioOuputFormatChangesOnNextSet)]
+ HRESULT AllowAudioOutputFormatChangesOnNextSet([out,retval] VARIANT_BOOL *allow);
+
+ [propget, id(DISPID_SVEventInterests)]
+ HRESULT EventInterests([out,retval] SpeechVoiceEvents *flags);
+
+ [propput, id(DISPID_SVEventInterests)]
+ HRESULT EventInterests([in] SpeechVoiceEvents flags);
+
+ [propput, id(DISPID_SVPriority)]
+ HRESULT Priority([in] SpeechVoicePriority vpriority);
+
+ [propget, id(DISPID_SVPriority)]
+ HRESULT Priority([out,retval] SpeechVoicePriority *vpriority);
+
+ [propput, id(DISPID_SVAlertBoundary)]
+ HRESULT AlertBoundary([in] SpeechVoiceEvents boundary);
+
+ [propget, id(DISPID_SVAlertBoundary)]
+ HRESULT AlertBoundary([out,retval] SpeechVoiceEvents *boundary);
+
+ [propput, id(DISPID_SVSyncronousSpeakTimeout)]
+ HRESULT SynchronousSpeakTimeout([in] long timeout);
+
+ [propget, id(DISPID_SVSyncronousSpeakTimeout)]
+ HRESULT SynchronousSpeakTimeout([out,retval] long *timeout);
+
+ [id(DISPID_SVSpeak)]
+ HRESULT Speak([in] BSTR text, [in, defaultvalue(SPF_DEFAULT)] SpeechVoiceSpeakFlags flags,
+ [out, retval] long *number);
+
+ [id(DISPID_SVSpeakStream)]
+ HRESULT SpeakStream([in] ISpeechBaseStream *stream, [in, defaultvalue(SPF_DEFAULT)] SpeechVoiceSpeakFlags flags,
+ [out, retval] long *number);
+
+ [id(DISPID_SVPause)]
+ HRESULT Pause(void);
+
+ [id(DISPID_SVResume)]
+ HRESULT Resume(void);
+
+ [id(DISPID_SVSkip)]
+ HRESULT Skip([in] const BSTR type, [in] long items, [out,retval ]long *skipped);
+
+ [id(DISPID_SVGetVoices)]
+ HRESULT GetVoices([in, defaultvalue("")] BSTR required, [in, defaultvalue("")] BSTR optional,
+ [out,retval] ISpeechObjectTokens **tokens);
+
+ [id(DISPID_SVGetAudioOutputs)]
+ HRESULT GetAudioOutputs([in, defaultvalue("")] BSTR required, [in, defaultvalue("")] BSTR optional,
+ [out,retval] ISpeechObjectTokens **tokens);
+
+ [id(DISPID_SVWaitUntilDone)]
+ HRESULT WaitUntilDone([in] long msTimeout, [out,retval] VARIANT_BOOL *done);
+
+ [hidden, id(DISPID_SVSpeakCompleteEvent)]
+ HRESULT SpeakCompleteEvent([out,retval] long *handle);
+
+ [id(DISPID_SVIsUISupported)]
+ HRESULT IsUISupported( [in] const BSTR typeui, [in, defaultvalue(NULL)] const VARIANT *data,
+ [out,retval] VARIANT_BOOL *supported);
+
+ [id(DISPID_SVDisplayUI)]
+ HRESULT DisplayUI([in] long hwnd, [in] BSTR title, [in] const BSTR typeui, [in, defaultvalue(NULL)] const VARIANT *data);
+};
+
+typedef [hidden] enum DISPID_SpeechRecoResultTimes
+{
+ DISPID_SRRTStreamTime = 1,
+ DISPID_SRRTLength,
+ DISPID_SRRTTickCount,
+ DISPID_SRRTOffsetFromStart
+} DISPID_SpeechRecoResultTimes;
+
+[
+ object,
+ uuid(62b3b8fb-f6e7-41be-bdcb-056b1c29efc0),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechRecoResultTimes : IDispatch
+{
+ [propget, id(DISPID_SRRTStreamTime)]
+ HRESULT StreamTime([out,retval] VARIANT *streamtime);
+
+ [propget, id(DISPID_SRRTLength)]
+ HRESULT Length([out,retval] VARIANT *length);
+
+ [propget, id(DISPID_SRRTTickCount)]
+ HRESULT TickCount([out,retval] long *count);
+
+ [propget, id(DISPID_SRRTOffsetFromStart)]
+ HRESULT OffsetFromStart([out,retval] VARIANT *offset);
+};
+
+typedef [hidden] enum DISPID_SpeechPhraseRules
+{
+ DISPID_SPRulesCount = 1,
+ DISPID_SPRulesItem = DISPID_VALUE,
+ DISPID_SPRules_NewEnum = DISPID_NEWENUM
+} DISPID_SpeechPhraseRules;
+
+[
+ object,
+ uuid(9047d593-01dd-4b72-81a3-e4a0ca69f407),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechPhraseRules : IDispatch
+{
+ [propget, id(DISPID_SPRulesCount)]
+ HRESULT Count([out, retval] long *count);
+
+ [id(DISPID_SPRulesItem)]
+ HRESULT Item([in] long index, [out, retval] ISpeechPhraseRule **rule);
+
+ [propget, restricted, id(DISPID_SPRules_NewEnum)]
+ HRESULT _NewEnum([out, retval] IUnknown **obj);
+};
+
+typedef [hidden] enum DISPID_SpeechPhraseRule
+{
+ DISPID_SPRuleName = 1,
+ DISPID_SPRuleId,
+ DISPID_SPRuleFirstElement,
+ DISPID_SPRuleNumberOfElements,
+ DISPID_SPRuleParent,
+ DISPID_SPRuleChildren,
+ DISPID_SPRuleConfidence,
+ DISPID_SPRuleEngineConfidence
+} DISPID_SpeechPhraseRule;
+
+[
+ object,
+ uuid(a7bfe112-a4a0-48d9-b602-c313843f6964),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechPhraseRule : IDispatch
+{
+ [propget, id(DISPID_SPRuleName)]
+ HRESULT Name([out, retval]BSTR *name);
+
+ [propget, id(DISPID_SPRuleId)]
+ HRESULT Id( [out, retval] long *id);
+
+ [propget, id(DISPID_SPRuleFirstElement)]
+ HRESULT FirstElement([out, retval] long *element);
+
+ [propget, id(DISPID_SPRuleNumberOfElements)]
+ HRESULT NumberOfElements([out, retval] long *count);
+
+ [propget, id(DISPID_SPRuleParent)]
+ HRESULT Parent([out, retval] ISpeechPhraseRule **parent);
+
+ [propget, id(DISPID_SPRuleChildren)]
+ HRESULT Children([out, retval] ISpeechPhraseRules **children);
+
+ [propget, id(DISPID_SPRuleConfidence)]
+ HRESULT Confidence([out, retval] SpeechEngineConfidence *confidence);
+
+ [propget, id(DISPID_SPRuleEngineConfidence)]
+ HRESULT EngineConfidence([out, retval] float *confidence);
+};
+
+typedef [hidden] enum DISPID_SpeechPhraseProperty
+{
+ DISPID_SPPName = 1,
+ DISPID_SPPId,
+ DISPID_SPPValue,
+ DISPID_SPPFirstElement,
+ DISPID_SPPNumberOfElements,
+ DISPID_SPPEngineConfidence,
+ DISPID_SPPConfidence,
+ DISPID_SPPParent,
+ DISPID_SPPChildren
+} DISPID_SpeechPhraseProperty;
+
+[
+ object,
+ uuid(CE563D48-961E-4732-A2E1-378A42B430BE),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechPhraseProperty : IDispatch
+{
+ [propget, id(DISPID_SPPName)]
+ HRESULT Name([out, retval] BSTR *name);
+
+ [propget, id(DISPID_SPPId)]
+ HRESULT Id([out, retval] long *id);
+
+ [propget, id(DISPID_SPPValue)]
+ HRESULT Value([out, retval] VARIANT *value);
+
+ [propget, id(DISPID_SPPFirstElement)]
+ HRESULT FirstElement( [out, retval] long *element);
+
+ [propget, id(DISPID_SPPNumberOfElements)]
+ HRESULT NumberOfElements([out, retval] long *elements);
+
+ [propget, id(DISPID_SPPEngineConfidence)]
+ HRESULT EngineConfidence([out, retval] float *confidence);
+
+ [propget, id(DISPID_SPPConfidence)]
+ HRESULT Confidence([out, retval] SpeechEngineConfidence *Confidence);
+
+ [propget, id(DISPID_SPPParent)]
+ HRESULT Parent([out, retval] ISpeechPhraseProperty **parent);
+
+ [propget, id(DISPID_SPPChildren)]
+ HRESULT Children( [out, retval] ISpeechPhraseProperties **children);
+};
+
+typedef [hidden] enum DISPID_SpeechPhraseProperties
+{
+ DISPID_SPPsCount = 1,
+ DISPID_SPPsItem = DISPID_VALUE,
+ DISPID_SPPs_NewEnum = DISPID_NEWENUM
+} DISPID_SpeechPhraseProperties;
+
+[
+ object,
+ uuid(08166b47-102e-4b23-a599-bdb98dbfd1f4),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechPhraseProperties : IDispatch
+{
+ [propget, id(DISPID_SPPsCount)]
+ HRESULT Count([out, retval] long *count);
+
+ [id(DISPID_SPPsItem)]
+ HRESULT Item([in] long index, [out, retval] ISpeechPhraseProperty **obj);
+
+ [propget, restricted, id(DISPID_SPPs_NewEnum)]
+ HRESULT _NewEnum([out, retval] IUnknown **obj);
+};
+
+typedef [hidden] enum DISPID_SpeechPhraseElement
+{
+ DISPID_SPEAudioTimeOffset = 1,
+ DISPID_SPEAudioSizeTime,
+ DISPID_SPEAudioStreamOffset,
+ DISPID_SPEAudioSizeBytes,
+ DISPID_SPERetainedStreamOffset,
+ DISPID_SPERetainedSizeBytes,
+ DISPID_SPEDisplayText,
+ DISPID_SPELexicalForm,
+ DISPID_SPEPronunciation,
+ DISPID_SPEDisplayAttributes,
+ DISPID_SPERequiredConfidence,
+ DISPID_SPEActualConfidence,
+ DISPID_SPEEngineConfidence
+} DISPID_SpeechPhraseElement;
+
+[
+ object,
+ uuid(e6176f96-e373-4801-b223-3b62c068c0b4),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechPhraseElement : IDispatch
+{
+ [propget, id(DISPID_SPEAudioTimeOffset)]
+ HRESULT AudioTimeOffset( [out, retval] long *offset);
+
+ [propget, id(DISPID_SPEAudioSizeTime)]
+ HRESULT AudioSizeTime([out, retval] long *audiotime);
+
+ [propget, id(DISPID_SPEAudioStreamOffset)]
+ HRESULT AudioStreamOffset([out, retval] long *offset);
+
+ [propget, id(DISPID_SPEAudioSizeBytes)]
+ HRESULT AudioSizeBytes([out, retval]long *bytes);
+
+ [propget, id(DISPID_SPERetainedStreamOffset)]
+ HRESULT RetainedStreamOffset([out, retval] long *offset);
+
+ [propget, id(DISPID_SPERetainedSizeBytes)]
+ HRESULT RetainedSizeBytes([out, retval] long *retained);
+
+ [propget, id(DISPID_SPEDisplayText)]
+ HRESULT DisplayText([out, retval] BSTR *display);
+
+ [propget, id(DISPID_SPELexicalForm)]
+ HRESULT LexicalForm( [out, retval] BSTR *lexical);
+
+ [propget, id(DISPID_SPEPronunciation)]
+ HRESULT Pronunciation([out, retval] VARIANT *pronunciation);
+
+ [propget, id(DISPID_SPEDisplayAttributes)]
+ HRESULT DisplayAttributes([out, retval] SpeechDisplayAttributes *attributes);
+
+ [propget, id(DISPID_SPERequiredConfidence)]
+ HRESULT RequiredConfidence([out, retval] SpeechEngineConfidence *confidence);
+
+ [propget, id(DISPID_SPEActualConfidence)]
+ HRESULT ActualConfidence([out, retval] SpeechEngineConfidence *confidence);
+
+ [propget, id(DISPID_SPEEngineConfidence)]
+ HRESULT EngineConfidence([out, retval] float *confidence);
+};
+
+typedef [hidden] enum DISPID_SpeechPhraseElements
+{
+ DISPID_SPEsCount = 1,
+ DISPID_SPEsItem = DISPID_VALUE,
+ DISPID_SPEs_NewEnum = DISPID_NEWENUM
+} DISPID_SpeechPhraseElements;
+
+[
+ object,
+ uuid(0626b328-3478-467d-a0b3-d0853b93dda3),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechPhraseElements : IDispatch
+{
+ [propget, id(DISPID_SPEsCount)]
+ HRESULT Count([out, retval] long *count);
+
+ [id(DISPID_SPEsItem)]
+ HRESULT Item([in] long Index, [out, retval] ISpeechPhraseElement **element);
+
+ [propget, restricted, id(DISPID_SPEs_NewEnum)]
+ HRESULT _NewEnum([out, retval] IUnknown **obj);
+};
+
+typedef [hidden] enum DISPID_SpeechPhraseReplacement
+{
+ DISPID_SPRDisplayAttributes = 1,
+ DISPID_SPRText,
+ DISPID_SPRFirstElement,
+ DISPID_SPRNumberOfElements
+} DISPID_SpeechPhraseReplacement;
+
+[
+ object,
+ uuid(2890a410-53a7-4fb5-94ec-06d4998e3d02),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechPhraseReplacement : IDispatch
+{
+ [propget, id(DISPID_SPRDisplayAttributes)]
+ HRESULT DisplayAttributes([out,retval] SpeechDisplayAttributes *attributes);
+
+ [propget, id(DISPID_SPRText)]
+ HRESULT Text([out, retval] BSTR *text);
+
+ [propget, id(DISPID_SPRFirstElement)]
+ HRESULT FirstElement([out, retval] long *element);
+
+ [propget, id(DISPID_SPRNumberOfElements)]
+ HRESULT NumberOfElements([out, retval] long *elements);
+};
+
+typedef [hidden] enum DISPID_SpeechPhraseReplacements
+{
+ DISPID_SPRsCount = 1,
+ DISPID_SPRsItem = DISPID_VALUE,
+ DISPID_SPRs_NewEnum = DISPID_NEWENUM
+} DISPID_SpeechPhraseReplacements;
+
+[
+ object,
+ uuid(38bc662f-2257-4525-959e-2069d2596c05),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechPhraseReplacements : IDispatch
+{
+ [propget, id(DISPID_SPRsCount)]
+ HRESULT Count([out, retval] long *count);
+
+ [id(DISPID_SPRsItem)]
+ HRESULT Item([in] long index, [out, retval] ISpeechPhraseReplacement **reps);
+
+ [propget, restricted, id(DISPID_SPRs_NewEnum)]
+ HRESULT _NewEnum([out, retval] IUnknown **obj);
+};
+
+typedef [hidden] enum DISPID_SpeechPhraseInfo
+{
+ DISPID_SPILanguageId = 1,
+ DISPID_SPIGrammarId,
+ DISPID_SPIStartTime,
+ DISPID_SPIAudioStreamPosition,
+ DISPID_SPIAudioSizeBytes,
+ DISPID_SPIRetainedSizeBytes,
+ DISPID_SPIAudioSizeTime,
+ DISPID_SPIRule,
+ DISPID_SPIProperties,
+ DISPID_SPIElements,
+ DISPID_SPIReplacements,
+ DISPID_SPIEngineId,
+ DISPID_SPIEnginePrivateData,
+ DISPID_SPISaveToMemory,
+ DISPID_SPIGetText,
+ DISPID_SPIGetDisplayAttributes
+} DISPID_SpeechPhraseInfo;
+
+[
+ object,
+ uuid(961559cf-4e67-4662-8bf0-d93f1fcd61b3),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechPhraseInfo : IDispatch
+{
+ [propget, id(DISPID_SPILanguageId)]
+ HRESULT LanguageId( [out, retval] long *language);
+
+ [propget, id(DISPID_SPIGrammarId)]
+ HRESULT GrammarId([out, retval] VARIANT *grammar);
+
+ [propget, id(DISPID_SPIStartTime)]
+ HRESULT StartTime([out, retval]VARIANT *start);
+
+ [propget, id(DISPID_SPIAudioStreamPosition)]
+ HRESULT AudioStreamPosition([out, retval] VARIANT *position);
+
+ [propget, id(DISPID_SPIAudioSizeBytes)]
+ HRESULT AudioSizeBytes([out, retval] long *bytes);
+
+ [propget, id(DISPID_SPIRetainedSizeBytes)]
+ HRESULT RetainedSizeBytes([out, retval] long *bytes);
+
+ [propget, id(DISPID_SPIAudioSizeTime)]
+ HRESULT AudioSizeTime([out, retval] long *audiotime);
+
+ [propget, id(DISPID_SPIRule)]
+ HRESULT Rule([out, retval] ISpeechPhraseRule **rule);
+
+ [propget, id(DISPID_SPIProperties)]
+ HRESULT Properties([out, retval] ISpeechPhraseProperties **props);
+
+ [propget, id(DISPID_SPIElements)]
+ HRESULT Elements([out, retval] ISpeechPhraseElements **elements);
+
+ [propget, id(DISPID_SPIReplacements)]
+ HRESULT Replacements([out, retval] ISpeechPhraseReplacements **replacements);
+
+ [propget, id(DISPID_SPIEngineId)]
+ HRESULT EngineId([out, retval] BSTR *engine);
+
+ [propget, id(DISPID_SPIEnginePrivateData)]
+ HRESULT EnginePrivateData([out, retval] VARIANT *data);
+
+ [id(DISPID_SPISaveToMemory)]
+ HRESULT SaveToMemory([out,retval] VARIANT *block);
+
+ [id(DISPID_SPIGetText)]
+ HRESULT GetText([in, defaultvalue(0)] long start,
+ [in, defaultvalue(SPPR_ALL_ELEMENTS)] long elements,
+ [in, defaultvalue(-1)] VARIANT_BOOL replacements, [out,retval] BSTR *text);
+
+ [id(DISPID_SPIGetDisplayAttributes)]
+ HRESULT GetDisplayAttributes([in, defaultvalue(0)] long start,
+ [in, defaultvalue(SPPR_ALL_ELEMENTS)] long elements,
+ [in, defaultvalue(-1)] VARIANT_BOOL replacements,
+ [out,retval] SpeechDisplayAttributes *attributes);
+};
+
+typedef [hidden] enum DISPID_SpeechPhraseAlternate
+{
+ DISPID_SPARecoResult = 1,
+ DISPID_SPAStartElementInResult,
+ DISPID_SPANumberOfElementsInResult,
+ DISPID_SPAPhraseInfo,
+ DISPID_SPACommit
+} DISPID_SpeechPhraseAlternate;
+
+[
+ object,
+ uuid(27864a2a-2b9f-4cb8-92d3-0d2722fd1e73),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechPhraseAlternate : IDispatch
+{
+ [propget, id(DISPID_SPARecoResult)]
+ HRESULT RecoResult( [out,retval] ISpeechRecoResult **result);
+
+ [propget, id(DISPID_SPAStartElementInResult)]
+ HRESULT StartElementInResult([out,retval] long *element);
+
+ [propget, id(DISPID_SPANumberOfElementsInResult)]
+ HRESULT NumberOfElementsInResult([out,retval] long *elements);
+
+ [propget, id(DISPID_SPAPhraseInfo)]
+ HRESULT PhraseInfo( [out,retval] ISpeechPhraseInfo **PhraseInfo);
+
+ [id(DISPID_SPACommit)]
+ HRESULT Commit(void);
+};
+
+typedef [hidden] enum DISPID_SpeechPhraseAlternates
+{
+ DISPID_SPAsCount = 1,
+ DISPID_SPAsItem = DISPID_VALUE,
+ DISPID_SPAs_NewEnum = DISPID_NEWENUM
+} DISPID_SpeechPhraseAlternates;
+
+[
+ object,
+ uuid(b238b6d5-f276-4c3d-a6c1-2974801c3cc2),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechPhraseAlternates : IDispatch
+{
+ [propget, id(DISPID_SPAsCount)]
+ HRESULT Count([out, retval] long *count);
+
+ [id(DISPID_SPAsItem)]
+ HRESULT Item([in] long index, [out, retval] ISpeechPhraseAlternate **alternate);
+
+ [propget, restricted, id(DISPID_SPAs_NewEnum)]
+ HRESULT _NewEnum([out, retval] IUnknown **obj);
+};
+
+typedef [hidden] enum DISPID_SpeechMemoryStream
+{
+ DISPID_SMSSetData = 100,
+ DISPID_SMSGetData
+} DISPID_SpeechMemoryStream;
+
+[
+ object,
+ uuid(eeb14b68-808b-4abe-a5ea-b51da7588008),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechMemoryStream : ISpeechBaseStream
+{
+ [id(DISPID_SMSSetData)]
+ HRESULT SetData([in] VARIANT data);
+
+ [id(DISPID_SMSGetData)]
+ HRESULT GetData([out, retval] VARIANT *data);
+};
+
+typedef [hidden] enum DISPID_SpeechRecoResult
+{
+ DISPID_SRRRecoContext = 1,
+ DISPID_SRRTimes,
+ DISPID_SRRAudioFormat,
+ DISPID_SRRPhraseInfo,
+ DISPID_SRRAlternates,
+ DISPID_SRRAudio,
+ DISPID_SRRSpeakAudio,
+ DISPID_SRRSaveToMemory,
+ DISPID_SRRDiscardResultInfo
+} DISPID_SpeechRecoResult;
+
+[
+ object,
+ uuid(ed2879cf-ced9-4ee6-a534-de0191d5468d),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechRecoResult : IDispatch
+{
+ [propget, id(DISPID_SRRRecoContext)]
+ HRESULT RecoContext( [out,retval] ISpeechRecoContext** RecoContext );
+
+ [propget, id(DISPID_SRRTimes)]
+ HRESULT Times([out,retval] ISpeechRecoResultTimes **times);
+
+ [propputref, id(DISPID_SRRAudioFormat)]
+ HRESULT AudioFormat([in]ISpeechAudioFormat *format);
+ [propget, id(DISPID_SRRAudioFormat)]
+ HRESULT AudioFormat([out,retval] ISpeechAudioFormat **format);
+
+ [propget, id(DISPID_SRRPhraseInfo)]
+ HRESULT PhraseInfo([out,retval] ISpeechPhraseInfo **phrase);
+
+ [id(DISPID_SRRAlternates)]
+ HRESULT Alternates( [in] long count, [in, defaultvalue(0)] long start,
+ [in, defaultvalue(SPPR_ALL_ELEMENTS)] long elements,
+ [out,retval] ISpeechPhraseAlternates **alternates);
+
+ [id(DISPID_SRRAudio)]
+ HRESULT Audio([in, defaultvalue(0)] long start,
+ [in, defaultvalue(SPPR_ALL_ELEMENTS)] long elements,
+ [out,retval] ISpeechMemoryStream **stream);
+
+ [id(DISPID_SRRSpeakAudio)]
+ HRESULT SpeakAudio([in, defaultvalue(0)] long start,
+ [in, defaultvalue(SPPR_ALL_ELEMENTS)] long elements,
+ [in, defaultvalue(SPF_DEFAULT)] SpeechVoiceSpeakFlags flags,
+ [out,retval] long *stream);
+
+ [id(DISPID_SRRSaveToMemory)]
+ HRESULT SaveToMemory([out,retval] VARIANT *block);
+
+ [id(DISPID_SRRDiscardResultInfo)]
+ HRESULT DiscardResultInfo([in] SpeechDiscardType types);
+};
+
+typedef [hidden] enum DISPID_SpeechGrammarRule
+{
+ DISPID_SGRAttributes = 1,
+ DISPID_SGRInitialState,
+ DISPID_SGRName,
+ DISPID_SGRId,
+ DISPID_SGRClear,
+ DISPID_SGRAddResource,
+ DISPID_SGRAddState
+} DISPID_SpeechGrammarRule;
+
+typedef [hidden] enum DISPID_SpeechGrammarRuleStateTransitions
+{
+ DISPID_SGRSTsCount = 1,
+ DISPID_SGRSTsItem = DISPID_VALUE,
+ DISPID_SGRSTs_NewEnum = DISPID_NEWENUM
+} DISPID_SpeechGrammarRuleStateTransitions;
+
+typedef enum SpeechGrammarRuleStateTransitionType
+{
+ SGRSTTEpsilon = 0,
+ SGRSTTWord,
+ SGRSTTRule,
+ SGRSTTDictation,
+ SGRSTTWildcard,
+ SGRSTTTextBuffer
+} SpeechGrammarRuleStateTransitionType;
+
+typedef [hidden] enum DISPID_SpeechGrammarRuleStateTransition
+{
+ DISPID_SGRSTType = 1,
+ DISPID_SGRSTText,
+ DISPID_SGRSTRule,
+ DISPID_SGRSTWeight,
+ DISPID_SGRSTPropertyName,
+ DISPID_SGRSTPropertyId,
+ DISPID_SGRSTPropertyValue,
+ DISPID_SGRSTNextState
+} DISPID_SpeechGrammarRuleStateTransition;
+
+[
+ object,
+ uuid(cafd1db1-41d1-4a06-9863-e2e81da17a9a),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechGrammarRuleStateTransition : IDispatch
+{
+ [propget, id(DISPID_SGRSTType)]
+ HRESULT Type([out, retval] SpeechGrammarRuleStateTransitionType *type);
+
+ [propget, id(DISPID_SGRSTText)]
+ HRESULT Text([out, retval] BSTR *text);
+
+ [propget, id(DISPID_SGRSTRule)]
+ HRESULT Rule([out, retval] ISpeechGrammarRule **rule);
+
+ [propget, id(DISPID_SGRSTWeight)]
+ HRESULT Weight([out, retval] VARIANT *weight);
+
+ [propget, id(DISPID_SGRSTPropertyName)]
+ HRESULT PropertyName([out, retval] BSTR *name);
+
+ [propget, id(DISPID_SGRSTPropertyId)]
+ HRESULT PropertyId([out, retval] long *id);
+
+ [propget, id(DISPID_SGRSTPropertyValue)]
+ HRESULT PropertyValue([out, retval] VARIANT *value);
+
+ [propget, id(DISPID_SGRSTNextState)]
+ HRESULT NextState([out, retval] ISpeechGrammarRuleState **state);
+};
+
+[
+ object,
+ uuid(EABCE657-75BC-44a2-AA7F-C56476742963),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechGrammarRuleStateTransitions : IDispatch
+{
+ [propget, id(DISPID_SGRSTsCount)]
+ HRESULT Count([out, retval] long *count);
+
+ [id(DISPID_SGRSTsItem)]
+ HRESULT Item([in] long index, [out, retval] ISpeechGrammarRuleStateTransition **transition);
+
+ [propget, restricted, id(DISPID_SGRSTs_NewEnum)]
+ HRESULT _NewEnum([out, retval] IUnknown **enum_var);
+};
+
+typedef [hidden] enum DISPID_SpeechGrammarRuleState
+{
+ DISPID_SGRSRule = 1,
+ DISPID_SGRSTransitions,
+ DISPID_SGRSAddWordTransition,
+ DISPID_SGRSAddRuleTransition,
+ DISPID_SGRSAddSpecialTransition
+} DISPID_SpeechGrammarRuleState;
+
+[
+ object,
+ uuid(d4286f2c-ee67-45ae-b928-28d695362eda),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechGrammarRuleState : IDispatch
+{
+ [propget, id(DISPID_SGRSRule)]
+ HRESULT Rule([out, retval] ISpeechGrammarRule **rule);
+
+ [propget, id(DISPID_SGRSTransitions)]
+ HRESULT Transitions([out, retval] ISpeechGrammarRuleStateTransitions **transitions);
+
+ [id(DISPID_SGRSAddWordTransition)]
+ HRESULT AddWordTransition([in] ISpeechGrammarRuleState *state, [in] const BSTR Words,
+ [in, defaultvalue(" ")] const BSTR separators, [in, defaultvalue(SGLexical)] SpeechGrammarWordType type,
+ [in, defaultvalue("")] const BSTR name, [in, defaultvalue(0)] long id,
+ [in, defaultvalue(0)] VARIANT *value, [in, defaultvalue(1)] float weight);
+
+ [id(DISPID_SGRSAddRuleTransition)]
+ HRESULT AddRuleTransition([in] ISpeechGrammarRuleState *state, [in] ISpeechGrammarRule *rule,
+ [in, defaultvalue("")] const BSTR name, [in, defaultvalue(0)] long id,
+ [in, defaultvalue(0)] VARIANT *value, [in, defaultvalue(1)] float weight);
+
+ [id(DISPID_SGRSAddSpecialTransition)]
+ HRESULT AddSpecialTransition([in] ISpeechGrammarRuleState *state, [in] SpeechSpecialTransitionType type,
+ [in, defaultvalue("")] const BSTR name, [in, defaultvalue(0)] long id,
+ [in, defaultvalue(0)] VARIANT* value, [in, defaultvalue(1)] float weight);
+};
+
+[
+ object,
+ uuid(afe719cf-5dd1-44f2-999c-7a399f1cfccc),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechGrammarRule : IDispatch
+{
+ [propget, id(DISPID_SGRAttributes)]
+ HRESULT Attributes([out, retval] SpeechRuleAttributes *attributes);
+
+ [propget, id(DISPID_SGRInitialState)]
+ HRESULT InitialState([out, retval] ISpeechGrammarRuleState **state);
+
+ [propget, id(DISPID_SGRName)]
+ HRESULT Name([out, retval] BSTR *name);
+
+ [propget, id(DISPID_SGRId)]
+ HRESULT Id([out, retval] long *id);
+
+ [id(DISPID_SGRClear)]
+ HRESULT Clear();
+
+ [id(DISPID_SGRAddResource)]
+ HRESULT AddResource([in] const BSTR name, [in] const BSTR value);
+
+ [id(DISPID_SGRAddState)]
+ HRESULT AddState([out, retval] ISpeechGrammarRuleState **state);
+};
+
+typedef [hidden] enum DISPIDSPTSI
+{
+ DISPIDSPTSI_ActiveOffset = 1,
+ DISPIDSPTSI_ActiveLength,
+ DISPIDSPTSI_SelectionOffset,
+ DISPIDSPTSI_SelectionLength
+} DISPIDSPTSI;
+
+[
+ object,
+ uuid(3b9c7e7a-6eee-4ded-9092-11657279adbe),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechTextSelectionInformation : IDispatch
+{
+ [propput, id(DISPIDSPTSI_ActiveOffset)]
+ HRESULT ActiveOffset([in] long offset);
+ [propget, id(DISPIDSPTSI_ActiveOffset)]
+ HRESULT ActiveOffset([out, retval] long *offset);
+
+ [propput, id(DISPIDSPTSI_ActiveLength)]
+ HRESULT ActiveLength([in] long length);
+ [propget, id(DISPIDSPTSI_ActiveLength)]
+ HRESULT ActiveLength([out, retval] long *length);
+
+ [propput, id(DISPIDSPTSI_SelectionOffset)]
+ HRESULT SelectionOffset([in] long offset);
+ [propget, id(DISPIDSPTSI_SelectionOffset)]
+ HRESULT SelectionOffset([out, retval] long *offset);
+
+ [propput, id(DISPIDSPTSI_SelectionLength)]
+ HRESULT SelectionLength([in] long length);
+ [propget, id(DISPIDSPTSI_SelectionLength)]
+ HRESULT SelectionLength([out, retval] long* length);
+};
+
+typedef [hidden] enum DISPID_SpeechGrammarRules
+{
+ DISPID_SGRsCount = 1,
+ DISPID_SGRsDynamic,
+ DISPID_SGRsAdd,
+ DISPID_SGRsCommit,
+ DISPID_SGRsCommitAndSave,
+ DISPID_SGRsFindRule,
+ DISPID_SGRsItem = DISPID_VALUE,
+ DISPID_SGRs_NewEnum = DISPID_NEWENUM
+} DISPID_SpeechGrammarRules;
+
+[
+ object,
+ uuid(6ffa3b44-fc2d-40d1-8afc-32911c7f1ad1),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechGrammarRules : IDispatch
+{
+ [propget, id(DISPID_SGRsCount)]
+ HRESULT Count([out, retval] long *count);
+
+ [id(DISPID_SGRsFindRule)]
+ HRESULT FindRule([in] VARIANT id, [out, retval] ISpeechGrammarRule **rule);
+
+ [id(DISPID_SGRsItem)]
+ HRESULT Item([in] long index, [out, retval] ISpeechGrammarRule **rule);
+
+ [id(DISPID_SGRs_NewEnum), propget, restricted]
+ HRESULT _NewEnum([out, retval] IUnknown **enum_var);
+
+ [propget, id(DISPID_SGRsDynamic)]
+ HRESULT Dynamic([out, retval] VARIANT_BOOL *dynamic);
+
+ [id(DISPID_SGRsAdd)]
+ HRESULT Add([in] BSTR name, [in] SpeechRuleAttributes attributes,
+ [in, defaultvalue(0)] long id, [out, retval] ISpeechGrammarRule **rule);
+
+ [id(DISPID_SGRsCommit)]
+ HRESULT Commit(void);
+
+ [id(DISPID_SGRsCommitAndSave)]
+ HRESULT CommitAndSave([out] BSTR *text, [out, retval] VARIANT *stream);
+};
+
+[
+ object,
+ uuid(b6d6f79f-2158-4e50-b5bc-9a9ccd852a09),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechRecoGrammar : IDispatch
+{
+ [propget, id(DISPID_SRGId)]
+ HRESULT Id([out, retval] VARIANT *id);
+
+ [propget, id(DISPID_SRGRecoContext)]
+ HRESULT RecoContext([out, retval] ISpeechRecoContext **context);
+
+ [propput, id(DISPID_SRGState)]
+ HRESULT State([in] SpeechGrammarState state);
+ [propget, id(DISPID_SRGState)]
+ HRESULT State([out, retval] SpeechGrammarState *state);
+
+ [propget, id(DISPID_SRGRules)]
+ HRESULT Rules([out, retval] ISpeechGrammarRules **rules);
+
+ [id(DISPID_SRGReset)]
+ HRESULT Reset([in, defaultvalue(0)] SpeechLanguageId language);
+
+ [id(DISPID_SRGCmdLoadFromFile)]
+ HRESULT CmdLoadFromFile([in] const BSTR filename, [in, defaultvalue(SLOStatic)] SpeechLoadOption option);
+
+ [id(DISPID_SRGCmdLoadFromObject)]
+ HRESULT CmdLoadFromObject([in]const BSTR classid, [in] const BSTR grammarname, [in, defaultvalue(SLOStatic)] SpeechLoadOption option);
+
+ [id(DISPID_SRGCmdLoadFromResource)]
+ HRESULT CmdLoadFromResource([in]long mod, [in] VARIANT name, [in] VARIANT yype, [in] SpeechLanguageId language,
+ [in, defaultvalue(SLOStatic)] SpeechLoadOption option);
+
+ [id(DISPID_SRGCmdLoadFromMemory)]
+ HRESULT CmdLoadFromMemory([in] VARIANT data, [in, defaultvalue(SLOStatic)] SpeechLoadOption option);
+
+ [id(DISPID_SRGCmdLoadFromProprietaryGrammar)]
+ HRESULT CmdLoadFromProprietaryGrammar([in] const BSTR guid, [in] const BSTR string, [in] VARIANT data,
+ [in, defaultvalue(SLOStatic)] SpeechLoadOption option);
+
+ [id(DISPID_SRGCmdSetRuleState)]
+ HRESULT CmdSetRuleState([in] const BSTR name, [in] SpeechRuleState state);
+
+ [id(DISPID_SRGCmdSetRuleIdState)]
+ HRESULT CmdSetRuleIdState([in] long rule, [in] SpeechRuleState State);
+
+ [id(DISPID_SRGDictationLoad)]
+ HRESULT DictationLoad([in, defaultvalue("")] const BSTR topic, [in, defaultvalue(SLOStatic)] SpeechLoadOption option);
+
+ [id(DISPID_SRGDictationUnload)]
+ HRESULT DictationUnload(void);
+
+ [id(DISPID_SRGDictationSetState)]
+ HRESULT DictationSetState([in] SpeechRuleState State);
+
+ [id(DISPID_SRGSetWordSequenceData)]
+ HRESULT SetWordSequenceData([in] const BSTR text, [in] long length, [in] ISpeechTextSelectionInformation *info);
+
+ [id(DISPID_SRGSetTextSelection)]
+ HRESULT SetTextSelection([in] ISpeechTextSelectionInformation *info);
+
+ [id(DISPID_SRGIsPronounceable)]
+ HRESULT IsPronounceable([in] const BSTR word, [out, retval] SpeechWordPronounceable *pronounceable);
+};
+
+[
+ object,
+ uuid(580aa49d-7e1e-4809-b8e2-57da806104b8),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechRecoContext : IDispatch
+{
+ [propget, id(DISPID_SRCRecognizer)]
+ HRESULT Recognizer([out,retval] ISpeechRecognizer **recognizer);
+
+ [propget, id(DISPID_SRCAudioInInterferenceStatus)]
+ HRESULT AudioInputInterferenceStatus([out,retval] SpeechInterference *interference);
+
+ [propget, id(DISPID_SRCRequestedUIType)]
+ HRESULT RequestedUIType([out,retval] BSTR *type );
+
+ [propputref, id(DISPID_SRCVoice)]
+ HRESULT Voice([in] ISpeechVoice *voice);
+ [propget, id(DISPID_SRCVoice)]
+ HRESULT Voice([out,retval] ISpeechVoice **voice);
+
+ [propput, hidden, id(DISPID_SRAllowVoiceFormatMatchingOnNextSet)]
+ HRESULT AllowVoiceFormatMatchingOnNextSet([in] VARIANT_BOOL allow);
+ [propget, hidden, id(DISPID_SRAllowVoiceFormatMatchingOnNextSet)]
+ HRESULT AllowVoiceFormatMatchingOnNextSet([out,retval] VARIANT_BOOL *allow);
+
+ [propput, id(DISPID_SRCVoicePurgeEvent)]
+ HRESULT VoicePurgeEvent([in] SpeechRecoEvents interest);
+ [propget, id(DISPID_SRCVoicePurgeEvent)]
+ HRESULT VoicePurgeEvent([out,retval] SpeechRecoEvents *interest);
+
+ [propput, id(DISPID_SRCEventInterests)]
+ HRESULT EventInterests([in] SpeechRecoEvents interest);
+ [propget, id(DISPID_SRCEventInterests)]
+ HRESULT EventInterests([out,retval] SpeechRecoEvents *interest);
+
+ [propput, id(DISPID_SRCCmdMaxAlternates)]
+ HRESULT CmdMaxAlternates([in] long alternates);
+ [propget, id(DISPID_SRCCmdMaxAlternates)]
+ HRESULT CmdMaxAlternates([out,retval] long *alternates);
+
+ [propput, id(DISPID_SRCState)]
+ HRESULT State([in] SpeechRecoContextState state);
+ [propget, id(DISPID_SRCState)]
+ HRESULT State([out,retval] SpeechRecoContextState *state);
+
+ [propput, id(DISPID_SRCRetainedAudio)]
+ HRESULT RetainedAudio([in] SpeechRetainedAudioOptions option);
+ [propget, id(DISPID_SRCRetainedAudio)]
+ HRESULT RetainedAudio([out,retval] SpeechRetainedAudioOptions *option);
+
+ [propputref, id(DISPID_SRCRetainedAudioFormat)]
+ HRESULT RetainedAudioFormat([in] ISpeechAudioFormat *format);
+ [propget, id(DISPID_SRCRetainedAudioFormat)]
+ HRESULT RetainedAudioFormat([out,retval] ISpeechAudioFormat **format);
+
+ [id(DISPID_SRCPause)]
+ HRESULT Pause(void);
+
+ [id(DISPID_SRCResume)]
+ HRESULT Resume(void);
+
+ [id(DISPID_SRCCreateGrammar)]
+ HRESULT CreateGrammar([in, defaultvalue(0)] VARIANT id, [out,retval] ISpeechRecoGrammar **grammar);
+
+ [id(DISPID_SRCCreateResultFromMemory)]
+ HRESULT CreateResultFromMemory([in] VARIANT *block, [out,retval] ISpeechRecoResult **result);
+
+ [id(DISPID_SRCBookmark)]
+ HRESULT Bookmark([in] SpeechBookmarkOptions options, [in] VARIANT pos, [in] VARIANT bookmark);
+
+ [id(DISPID_SRCSetAdaptationData)]
+ HRESULT SetAdaptationData([in] BSTR adaptation);
+};
+
+typedef [hidden] enum DISPID_SpeechRecognizer
+{
+ DISPID_SRRecognizer = 1,
+ DISPID_SRAllowAudioInputFormatChangesOnNextSet,
+ DISPID_SRAudioInput,
+ DISPID_SRAudioInputStream,
+ DISPID_SRIsShared,
+ DISPID_SRState,
+ DISPID_SRStatus,
+ DISPID_SRProfile,
+ DISPID_SREmulateRecognition,
+ DISPID_SRCreateRecoContext,
+ DISPID_SRGetFormat,
+ DISPID_SRSetPropertyNumber,
+ DISPID_SRGetPropertyNumber,
+ DISPID_SRSetPropertyString,
+ DISPID_SRGetPropertyString,
+ DISPID_SRIsUISupported,
+ DISPID_SRDisplayUI,
+ DISPID_SRGetRecognizers,
+ DISPID_SVGetAudioInputs,
+ DISPID_SVGetProfiles
+} DISPID_SpeechRecognizer;
+
+[
+ object,
+ uuid(2d5f1c0c-bd75-4b08-9478-3b11fea2586c),
+ dual,
+ pointer_default(unique)
+]
+interface ISpeechRecognizer : IDispatch
+{
+ [propputref, id(DISPID_SRRecognizer)]
+ HRESULT Recognizer([in]ISpeechObjectToken *recognizer);
+ [propget, id(DISPID_SRRecognizer)]
+ HRESULT Recognizer([out,retval]ISpeechObjectToken **recognizer);
+
+ [propput, hidden, id(DISPID_SRAllowAudioInputFormatChangesOnNextSet)]
+ HRESULT AllowAudioInputFormatChangesOnNextSet([in] VARIANT_BOOL allow);
+ [propget, hidden, id(DISPID_SRAllowAudioInputFormatChangesOnNextSet)]
+ HRESULT AllowAudioInputFormatChangesOnNextSet([out,retval] VARIANT_BOOL *allow);
+
+ [propputref, id(DISPID_SRAudioInput)]
+ HRESULT AudioInput([in,defaultvalue(0)] ISpeechObjectToken *input);
+ [propget, id(DISPID_SRAudioInput)]
+ HRESULT AudioInput([out,retval] ISpeechObjectToken **input);
+
+ [propputref, id(DISPID_SRAudioInputStream)]
+ HRESULT AudioInputStream([in,defaultvalue(0)] ISpeechBaseStream *input);
+ [propget, id(DISPID_SRAudioInputStream)]
+ HRESULT AudioInputStream([out,retval] ISpeechBaseStream **input);
+
+ [propget, id(DISPID_SRIsShared)]
+ HRESULT IsShared([out,retval] VARIANT_BOOL *shared);
+
+ [propput, id(DISPID_SRState)]
+ HRESULT State([in] SpeechRecognizerState state);
+ [propget, id(DISPID_SRState)]
+ HRESULT State([out,retval] SpeechRecognizerState *state);
+
+ [propget, id(DISPID_SRStatus)]
+ HRESULT Status([out,retval] ISpeechRecognizerStatus **satus);
+
+ [propputref, id(DISPID_SRProfile)]
+ HRESULT Profile([in,defaultvalue(0)] ISpeechObjectToken *profile);
+ [propget, id(DISPID_SRProfile)]
+ HRESULT Profile([out,retval] ISpeechObjectToken **profile);
+
+ [id(DISPID_SREmulateRecognition)]
+ HRESULT EmulateRecognition([in] VARIANT elements, [in, defaultvalue(NULL)] VARIANT *attributes,
+ [in, defaultvalue(0)] long id);
+
+ [id(DISPID_SRCreateRecoContext)]
+ HRESULT CreateRecoContext([out,retval] ISpeechRecoContext **ncontext);
+
+ [id(DISPID_SRGetFormat)]
+ HRESULT GetFormat([in] SpeechFormatType speechtype, [out,retval] ISpeechAudioFormat **audioformat);
+
+ [hidden, id(DISPID_SRSetPropertyNumber)]
+ HRESULT SetPropertyNumber([in] const BSTR name, [in] long value, [out,retval] VARIANT_BOOL *supported);
+
+ [hidden, id(DISPID_SRGetPropertyNumber)]
+ HRESULT GetPropertyNumber([in] const BSTR name, [in,out] long *value, [out,retval] VARIANT_BOOL *supported);
+
+ [hidden, id(DISPID_SRSetPropertyString)]
+ HRESULT SetPropertyString([in] const BSTR name, [in] const BSTR value, [out,retval] VARIANT_BOOL *supported);
+
+ [hidden, id(DISPID_SRGetPropertyString)]
+ HRESULT GetPropertyString([in] const BSTR name, [in,out] BSTR *value, [out,retval] VARIANT_BOOL *supported);
+
+ [id(DISPID_SRIsUISupported)]
+ HRESULT IsUISupported([in] const BSTR type, [in, defaultvalue(NULL)] const VARIANT *data,
+ [out,retval] VARIANT_BOOL *supported);
+
+ [id(DISPID_SRDisplayUI)]
+ HRESULT DisplayUI( [in] long hWnd, [in] BSTR title, [in] const BSTR type, [in, defaultvalue(NULL)] const VARIANT *data);
+
+ [id(DISPID_SRGetRecognizers)]
+ HRESULT GetRecognizers([in, defaultvalue("")] BSTR required, [in, defaultvalue("")] BSTR optional,
+ [out,retval] ISpeechObjectTokens **tokens);
+
+ [id(DISPID_SVGetAudioInputs)]
+ HRESULT GetAudioInputs([in, defaultvalue("")] BSTR required, [in, defaultvalue("")] BSTR optional,
+ [out,retval] ISpeechObjectTokens **tokens);
+
+ [id(DISPID_SVGetProfiles)]
+ HRESULT GetProfiles([in, defaultvalue("")] BSTR required, [in, defaultvalue("")] BSTR optional,
+ [out,retval] ISpeechObjectTokens **tokens);
+
+};
--
2.17.1
1
0
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
This patch series will implement some of the dynamic TypeInfo for the
script's dispatch, that inherits from IDispatch. It's necessary to do it
this way since the members are retrieved from the script itself. Note that
even the member IDs on Windows have the upper 16 bits zero, unlike normal
typelibs (i.e. they start from 1, so this patch series will do something
similar to Windows)
Implementing the TypeInfo is necessary even for Wine's own msscript.ocx
(for example, to implement the Procedures property with tests) or to have
native msscript work properly.
More patches to implement the remaining methods will come after this patch
set (I didn't want to flood the mailing list).
dlls/vbscript/vbdisp.c | 270 ++++++++++++++++++++++++++++++++++++++++-
1 file changed, 268 insertions(+), 2 deletions(-)
diff --git a/dlls/vbscript/vbdisp.c b/dlls/vbscript/vbdisp.c
index fb646e7..f3385ae 100644
--- a/dlls/vbscript/vbdisp.c
+++ b/dlls/vbscript/vbdisp.c
@@ -700,6 +700,267 @@ static ident_map_t *add_ident(ScriptDisp *This, const WCHAR *name)
return ret;
}
+typedef struct {
+ ITypeInfo ITypeInfo_iface;
+ LONG ref;
+} ScriptTypeInfo;
+
+static inline ScriptTypeInfo *ScriptTypeInfo_from_ITypeInfo(ITypeInfo *iface)
+{
+ return CONTAINING_RECORD(iface, ScriptTypeInfo, ITypeInfo_iface);
+}
+
+static HRESULT WINAPI ScriptTypeInfo_QueryInterface(ITypeInfo *iface, REFIID riid, void **ppv)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ if (IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_ITypeInfo, riid))
+ *ppv = &This->ITypeInfo_iface;
+ else
+ {
+ WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
+ *ppv = NULL;
+ return E_NOINTERFACE;
+ }
+
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
+ IUnknown_AddRef((IUnknown*)*ppv);
+ return S_OK;
+}
+
+static ULONG WINAPI ScriptTypeInfo_AddRef(ITypeInfo *iface)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+ LONG ref = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p) ref=%d\n", This, ref);
+
+ return ref;
+}
+
+static ULONG WINAPI ScriptTypeInfo_Release(ITypeInfo *iface)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+ LONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE("(%p) ref=%d\n", This, ref);
+
+ if (!ref)
+ {
+ heap_free(This);
+ }
+ return ref;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetTypeAttr(ITypeInfo *iface, TYPEATTR **ppTypeAttr)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p)\n", This, ppTypeAttr);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetTypeComp(ITypeInfo *iface, ITypeComp **ppTComp)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p)\n", This, ppTComp);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetFuncDesc(ITypeInfo *iface, UINT index, FUNCDESC **ppFuncDesc)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%u %p)\n", This, index, ppFuncDesc);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetVarDesc(ITypeInfo *iface, UINT index, VARDESC **ppVarDesc)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%u %p)\n", This, index, ppVarDesc);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetNames(ITypeInfo *iface, MEMBERID memid, BSTR *rgBstrNames,
+ UINT cMaxNames, UINT *pcNames)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%d %p %u %p)\n", This, memid, rgBstrNames, cMaxNames, pcNames);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetRefTypeOfImplType(ITypeInfo *iface, UINT index, HREFTYPE *pRefType)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%u %p)\n", This, index, pRefType);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetImplTypeFlags(ITypeInfo *iface, UINT index, INT *pImplTypeFlags)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%u %p)\n", This, index, pImplTypeFlags);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetIDsOfNames(ITypeInfo *iface, LPOLESTR *rgszNames, UINT cNames,
+ MEMBERID *pMemId)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p %u %p)\n", This, rgszNames, cNames, pMemId);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_Invoke(ITypeInfo *iface, PVOID pvInstance, MEMBERID memid, WORD wFlags,
+ DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p %d %d %p %p %p %p)\n", This, pvInstance, memid, wFlags,
+ pDispParams, pVarResult, pExcepInfo, puArgErr);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetDocumentation(ITypeInfo *iface, MEMBERID memid, BSTR *pBstrName,
+ BSTR *pBstrDocString, DWORD *pdwHelpContext, BSTR *pBstrHelpFile)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%d %p %p %p %p)\n", This, memid, pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetDllEntry(ITypeInfo *iface, MEMBERID memid, INVOKEKIND invKind,
+ BSTR *pBstrDllName, BSTR *pBstrName, WORD *pwOrdinal)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%d %d %p %p %p)\n", This, memid, invKind, pBstrDllName, pBstrName, pwOrdinal);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetRefTypeInfo(ITypeInfo *iface, HREFTYPE hRefType, ITypeInfo **ppTInfo)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%x %p)\n", This, hRefType, ppTInfo);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_AddressOfMember(ITypeInfo *iface, MEMBERID memid, INVOKEKIND invKind, PVOID *ppv)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%d %d %p)\n", This, memid, invKind, ppv);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_CreateInstance(ITypeInfo *iface, IUnknown *pUnkOuter, REFIID riid, PVOID *ppvObj)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p %s %p)\n", This, pUnkOuter, debugstr_guid(riid), ppvObj);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetMops(ITypeInfo *iface, MEMBERID memid, BSTR *pBstrMops)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%d %p)\n", This, memid, pBstrMops);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetContainingTypeLib(ITypeInfo *iface, ITypeLib **ppTLib, UINT *pIndex)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p %p)\n", This, ppTLib, pIndex);
+
+ return E_NOTIMPL;
+}
+
+static void WINAPI ScriptTypeInfo_ReleaseTypeAttr(ITypeInfo *iface, TYPEATTR *pTypeAttr)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p)\n", This, pTypeAttr);
+}
+
+static void WINAPI ScriptTypeInfo_ReleaseFuncDesc(ITypeInfo *iface, FUNCDESC *pFuncDesc)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p)\n", This, pFuncDesc);
+}
+
+static void WINAPI ScriptTypeInfo_ReleaseVarDesc(ITypeInfo *iface, VARDESC *pVarDesc)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p)\n", This, pVarDesc);
+}
+
+static const ITypeInfoVtbl ScriptTypeInfoVtbl = {
+ ScriptTypeInfo_QueryInterface,
+ ScriptTypeInfo_AddRef,
+ ScriptTypeInfo_Release,
+ ScriptTypeInfo_GetTypeAttr,
+ ScriptTypeInfo_GetTypeComp,
+ ScriptTypeInfo_GetFuncDesc,
+ ScriptTypeInfo_GetVarDesc,
+ ScriptTypeInfo_GetNames,
+ ScriptTypeInfo_GetRefTypeOfImplType,
+ ScriptTypeInfo_GetImplTypeFlags,
+ ScriptTypeInfo_GetIDsOfNames,
+ ScriptTypeInfo_Invoke,
+ ScriptTypeInfo_GetDocumentation,
+ ScriptTypeInfo_GetDllEntry,
+ ScriptTypeInfo_GetRefTypeInfo,
+ ScriptTypeInfo_AddressOfMember,
+ ScriptTypeInfo_CreateInstance,
+ ScriptTypeInfo_GetMops,
+ ScriptTypeInfo_GetContainingTypeLib,
+ ScriptTypeInfo_ReleaseTypeAttr,
+ ScriptTypeInfo_ReleaseFuncDesc,
+ ScriptTypeInfo_ReleaseVarDesc
+};
+
+static ITypeInfo *create_script_typeinfo(ScriptDisp *disp)
+{
+ ScriptTypeInfo *p;
+
+ if (!(p = heap_alloc(sizeof(*p))))
+ return NULL;
+
+ p->ITypeInfo_iface.lpVtbl = &ScriptTypeInfoVtbl;
+ p->ref = 1;
+
+ return &p->ITypeInfo_iface;
+}
+
static inline ScriptDisp *ScriptDisp_from_IDispatchEx(IDispatchEx *iface)
{
return CONTAINING_RECORD(iface, ScriptDisp, IDispatchEx_iface);
@@ -768,8 +1029,13 @@ static HRESULT WINAPI ScriptDisp_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, LC
ITypeInfo **ppTInfo)
{
ScriptDisp *This = ScriptDisp_from_IDispatchEx(iface);
- FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
- return E_NOTIMPL;
+
+ TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
+
+ if (iTInfo != 0) return DISP_E_BADINDEX;
+
+ *ppTInfo = create_script_typeinfo(This);
+ return *ppTInfo ? S_OK : E_OUTOFMEMORY;
}
static HRESULT WINAPI ScriptDisp_GetIDsOfNames(IDispatchEx *iface, REFIID riid,
--
2.21.0
3
14
16 Oct '19
Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
---
dlls/kernel32/tests/pipe.c | 31 +++++++++++++++++++++++--------
1 file changed, 23 insertions(+), 8 deletions(-)
2
2
[PATCH 2/6] server: Don't block when reading from named pipes in PIPE_NOWAIT mode.
by Jacek Caban 16 Oct '19
by Jacek Caban 16 Oct '19
16 Oct '19
From: Brendan Shanks <bshanks(a)codeweavers.com>
Fixes Rockstar Games Launcher hanging for some users.
Signed-off-by: Brendan Shanks <bshanks(a)codeweavers.com>
Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
---
dlls/kernel32/tests/pipe.c | 2 +-
server/named_pipe.c | 5 +++++
2 files changed, 6 insertions(+), 1 deletion(-)
2
1
[PATCH 5/6] server: Don't block ConnectNamedPipe for pipe in PIPE_NOWAIT mode.
by Jacek Caban 16 Oct '19
by Jacek Caban 16 Oct '19
16 Oct '19
From: Brendan Shanks <bshanks(a)codeweavers.com>
Signed-off-by: Brendan Shanks <bshanks(a)codeweavers.com>
Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
---
dlls/kernel32/tests/pipe.c | 4 ++--
server/named_pipe.c | 6 ++++++
2 files changed, 8 insertions(+), 2 deletions(-)
1
0