Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
b276bd58
Commit
b276bd58
authored
Nov 18, 2019
by
Jactry Zeng
Committed by
Alexandre Julliard
Dec 02, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
sapi: Implement ISpStream stub.
Signed-off-by:
Jactry Zeng
<
jzeng@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
28121b49
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
186 additions
and
0 deletions
+186
-0
automation.c
dlls/sapi/automation.c
+180
-0
automation.c
dlls/sapi/tests/automation.c
+6
-0
No files found.
dlls/sapi/automation.c
View file @
b276bd58
...
...
@@ -37,6 +37,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(sapi);
struct
file_stream
{
ISpeechFileStream
ISpeechFileStream_iface
;
ISpStream
ISpStream_iface
;
LONG
ref
;
};
...
...
@@ -45,6 +46,11 @@ static inline struct file_stream *impl_from_ISpeechFileStream(ISpeechFileStream
return
CONTAINING_RECORD
(
iface
,
struct
file_stream
,
ISpeechFileStream_iface
);
}
static
inline
struct
file_stream
*
impl_from_ISpStream
(
ISpStream
*
iface
)
{
return
CONTAINING_RECORD
(
iface
,
struct
file_stream
,
ISpStream_iface
);
}
/* ISpeechFileStream interface */
static
HRESULT
WINAPI
file_stream_QueryInterface
(
ISpeechFileStream
*
iface
,
REFIID
iid
,
void
**
obj
)
{
...
...
@@ -57,6 +63,8 @@ static HRESULT WINAPI file_stream_QueryInterface(ISpeechFileStream *iface, REFII
IsEqualIID
(
iid
,
&
IID_ISpeechBaseStream
)
||
IsEqualIID
(
iid
,
&
IID_ISpeechFileStream
))
*
obj
=
&
This
->
ISpeechFileStream_iface
;
else
if
(
IsEqualIID
(
iid
,
&
IID_ISpStream
))
*
obj
=
&
This
->
ISpStream_iface
;
else
{
*
obj
=
NULL
;
...
...
@@ -194,6 +202,177 @@ const static ISpeechFileStreamVtbl file_stream_vtbl =
file_stream_Close
};
/* ISpStream interface */
static
HRESULT
WINAPI
spstream_QueryInterface
(
ISpStream
*
iface
,
REFIID
iid
,
void
**
obj
)
{
struct
file_stream
*
This
=
impl_from_ISpStream
(
iface
);
TRACE
(
"(%p, %s, %p).
\n
"
,
iface
,
debugstr_guid
(
iid
),
obj
);
return
ISpeechFileStream_QueryInterface
(
&
This
->
ISpeechFileStream_iface
,
iid
,
obj
);
}
static
ULONG
WINAPI
spstream_AddRef
(
ISpStream
*
iface
)
{
struct
file_stream
*
This
=
impl_from_ISpStream
(
iface
);
TRACE
(
"(%p).
\n
"
,
iface
);
return
ISpeechFileStream_AddRef
(
&
This
->
ISpeechFileStream_iface
);
}
static
ULONG
WINAPI
spstream_Release
(
ISpStream
*
iface
)
{
struct
file_stream
*
This
=
impl_from_ISpStream
(
iface
);
TRACE
(
"(%p).
\n
"
,
iface
);
return
ISpeechFileStream_Release
(
&
This
->
ISpeechFileStream_iface
);
}
static
HRESULT
WINAPI
spstream_Read
(
ISpStream
*
iface
,
void
*
pv
,
ULONG
cb
,
ULONG
*
read
)
{
FIXME
(
"(%p, %p, %d, %p): stub.
\n
"
,
iface
,
pv
,
cb
,
read
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
spstream_Write
(
ISpStream
*
iface
,
const
void
*
pv
,
ULONG
cb
,
ULONG
*
written
)
{
FIXME
(
"(%p, %p, %d, %p): stub.
\n
"
,
iface
,
pv
,
cb
,
written
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
spstream_Seek
(
ISpStream
*
iface
,
LARGE_INTEGER
mode
,
DWORD
origin
,
ULARGE_INTEGER
*
position
)
{
FIXME
(
"(%p, %s, %d, %p): stub.
\n
"
,
iface
,
wine_dbgstr_longlong
(
mode
.
QuadPart
),
origin
,
position
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
spstream_SetSize
(
ISpStream
*
iface
,
ULARGE_INTEGER
size
)
{
FIXME
(
"(%p, %s): stub.
\n
"
,
iface
,
wine_dbgstr_longlong
(
size
.
QuadPart
));
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
spstream_CopyTo
(
ISpStream
*
iface
,
IStream
*
stream
,
ULARGE_INTEGER
cb
,
ULARGE_INTEGER
*
read
,
ULARGE_INTEGER
*
written
)
{
FIXME
(
"(%p, %p, %s, %p, %p): stub.
\n
"
,
iface
,
stream
,
wine_dbgstr_longlong
(
cb
.
QuadPart
),
read
,
written
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
spstream_Commit
(
ISpStream
*
iface
,
DWORD
flag
)
{
FIXME
(
"(%p, %d): stub.
\n
"
,
iface
,
flag
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
spstream_Revert
(
ISpStream
*
iface
)
{
FIXME
(
"(%p): stub.
\n
"
,
iface
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
spstream_LockRegion
(
ISpStream
*
iface
,
ULARGE_INTEGER
offset
,
ULARGE_INTEGER
cb
,
DWORD
type
)
{
FIXME
(
"(%p, %s, %s, %d): stub.
\n
"
,
iface
,
wine_dbgstr_longlong
(
offset
.
QuadPart
),
wine_dbgstr_longlong
(
cb
.
QuadPart
),
type
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
spstream_UnlockRegion
(
ISpStream
*
iface
,
ULARGE_INTEGER
offset
,
ULARGE_INTEGER
cb
,
DWORD
type
)
{
FIXME
(
"(%p, %s, %s, %d): stub.
\n
"
,
iface
,
wine_dbgstr_longlong
(
offset
.
QuadPart
),
wine_dbgstr_longlong
(
cb
.
QuadPart
),
type
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
spstream_Stat
(
ISpStream
*
iface
,
STATSTG
*
statstg
,
DWORD
flag
)
{
FIXME
(
"(%p, %p, %d): stub.
\n
"
,
iface
,
statstg
,
flag
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
spstream_Clone
(
ISpStream
*
iface
,
IStream
**
stream
)
{
FIXME
(
"(%p, %p): stub.
\n
"
,
iface
,
stream
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
spstream_GetFormat
(
ISpStream
*
iface
,
GUID
*
format
,
WAVEFORMATEX
**
wave
)
{
FIXME
(
"(%p, %p, %p): stub.
\n
"
,
iface
,
format
,
wave
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
spstream_SetBaseStream
(
ISpStream
*
iface
,
IStream
*
stream
,
REFGUID
format
,
const
WAVEFORMATEX
*
wave
)
{
FIXME
(
"(%p, %p, %s, %p): stub.
\n
"
,
iface
,
stream
,
debugstr_guid
(
format
),
wave
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
spstream_GetBaseStream
(
ISpStream
*
iface
,
IStream
**
stream
)
{
FIXME
(
"(%p, %p): stub.
\n
"
,
iface
,
stream
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
spstream_BindToFile
(
ISpStream
*
iface
,
LPCWSTR
filename
,
SPFILEMODE
mode
,
const
GUID
*
format
,
const
WAVEFORMATEX
*
wave
,
ULONGLONG
interest
)
{
FIXME
(
"(%p, %s, %d, %s, %p, %s): stub.
\n
"
,
iface
,
debugstr_w
(
filename
),
mode
,
debugstr_guid
(
format
),
wave
,
wine_dbgstr_longlong
(
interest
));
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
spstream_Close
(
ISpStream
*
iface
)
{
FIXME
(
"(%p): stub.
\n
"
,
iface
);
return
E_NOTIMPL
;
}
const
static
ISpStreamVtbl
spstream_vtbl
=
{
spstream_QueryInterface
,
spstream_AddRef
,
spstream_Release
,
spstream_Read
,
spstream_Write
,
spstream_Seek
,
spstream_SetSize
,
spstream_CopyTo
,
spstream_Commit
,
spstream_Revert
,
spstream_LockRegion
,
spstream_UnlockRegion
,
spstream_Stat
,
spstream_Clone
,
spstream_GetFormat
,
spstream_SetBaseStream
,
spstream_GetBaseStream
,
spstream_BindToFile
,
spstream_Close
};
HRESULT
file_stream_create
(
IUnknown
*
outer
,
REFIID
iid
,
void
**
obj
)
{
struct
file_stream
*
This
=
heap_alloc
(
sizeof
(
*
This
));
...
...
@@ -201,6 +380,7 @@ HRESULT file_stream_create(IUnknown *outer, REFIID iid, void **obj)
if
(
!
This
)
return
E_OUTOFMEMORY
;
This
->
ISpeechFileStream_iface
.
lpVtbl
=
&
file_stream_vtbl
;
This
->
ISpStream_iface
.
lpVtbl
=
&
spstream_vtbl
;
This
->
ref
=
1
;
hr
=
ISpeechFileStream_QueryInterface
(
&
This
->
ISpeechFileStream_iface
,
iid
,
obj
);
...
...
dlls/sapi/tests/automation.c
View file @
b276bd58
...
...
@@ -30,6 +30,7 @@ static void test_interfaces(void)
ISpeechFileStream
*
filestream
;
ISpeechBaseStream
*
basestream
;
IDispatch
*
dispatch
;
ISpStream
*
spstrem
;
IUnknown
*
unk
;
HRESULT
hr
;
...
...
@@ -52,6 +53,11 @@ static void test_interfaces(void)
ok
(
hr
==
S_OK
,
"Failed to create ISpeechBaseStream interface: %#x.
\n
"
,
hr
);
ISpeechBaseStream_Release
(
basestream
);
hr
=
CoCreateInstance
(
&
CLSID_SpFileStream
,
NULL
,
CLSCTX_INPROC_SERVER
,
&
IID_ISpStream
,
(
void
**
)
&
spstrem
);
ok
(
hr
==
S_OK
,
"Failed to create ISpStream interface: %#x.
\n
"
,
hr
);
ISpStream_Release
(
spstrem
);
ISpeechFileStream_Release
(
filestream
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment