82 *ret_iface = &
This->IDirectMusicPort_iface;
84 *ret_iface = &
This->IDirectMusicPortDownload_iface;
86 *ret_iface = &
This->IDirectMusicThru_iface;
88 *ret_iface = &
This->IKsControl_iface;
95 IUnknown_AddRef((
IUnknown*)*ret_iface);
172 TRACE(
"(%p, %p): method not implemented\n", iface,
event);
178 TRACE(
"(%p, %p): method not implemented\n", iface,
buffer);
183 IDirectMusicDownloadedInstrument **downloaded_instrument,
DMUS_NOTERANGE *note_ranges,
DWORD num_note_ranges)
187 TRACE(
"(%p, %p, %p, %p, %ld)\n", iface,
instrument, downloaded_instrument, note_ranges, num_note_ranges);
189 if (!
instrument || !downloaded_instrument || (num_note_ranges && !note_ranges))
196 IDirectMusicDownloadedInstrument *downloaded_instrument)
200 TRACE(
"(%p, %p)\n", iface, downloaded_instrument);
202 if (!downloaded_instrument)
221 FIXME(
"(%p/%p)->(%p): stub\n", iface,
This, stats);
228 TRACE(
"(%p): method not implemented\n", iface);
236 TRACE(
"(%p, %p)\n", iface, port_caps);
247 FIXME(
"(%p/%p, %ld, %p, %ld, %p, %ld, %p, %p): stub\n", iface,
This, io_control_code,
in_buffer, in_buffer_size,
out_buffer, out_buffer_size, bytes_returned,
overlapped);
256 FIXME(
"(%p, %ld): semi-stub\n", iface, channel_groups);
258 This->nrofgroups = channel_groups;
267 TRACE(
"(%p, %p)\n", iface, channel_groups);
269 *channel_groups =
This->nrofgroups;
318 WARN(
"isn't there supposed to be 16 channels (no. %ld requested)?! (faking as it is ok)\n",
channel);
348 if (
This->dsound !=
This->parent->dsound)
349 ERR(
"Not the same dsound in the port (%p) and parent dmusic (%p), expect trouble!\n",
350 This->dsound,
This->parent->dsound);
423 TRACE(
"(%p)\n", iface);
432 TRACE(
"(%p)\n", iface);
583 TRACE(
"(%p)\n", iface);
592 TRACE(
"(%p)\n", iface);
598 DWORD source_channel,
DWORD destination_channel_group,
DWORD destination_channel,
599 IDirectMusicPort *destination_port)
603 FIXME(
"(%p/%p, %ld, %ld, %ld, %ld, %p): stub\n", iface,
This, source_channel_group, source_channel, destination_channel_group, destination_channel, destination_port);
642 TRACE(
"(%p, %p, %lu, %p, %lu, %p)\n", iface, prop, prop_len,
data, data_len,
ret_len);
647 FIXME(
"prop flags %lu not yet supported\n", prop->
Flags);
651 if (data_len <
sizeof(
DWORD))
664 FIXME(
"(%p, %p, %lu, %p, %lu, %p): stub\n", iface,
method, method_len,
data, data_len,
ret_len);
672 FIXME(
"(%p, %p, %lu, %p, %lu, %p): stub\n", iface,
event, event_len,
data, data_len,
ret_len);
708 obj->params = *port_params;
712 (
void **)&
obj->synth);
715 hr =
CoCreateInstance(&CLSID_DirectMusicSynthSink,
NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicSynthSink, (
void**)&
obj->synth_sink);
734 for (
i = 0;
i <
obj->nrofgroups;
i++) {
735 TRACE (
"Setting default channel priorities on channel group %i\n",
i + 1);
757 *
port = &
obj->IDirectMusicPort_iface;
792 *ret_iface = &
This->IDirectMusicThru_iface;
799 IUnknown_AddRef((
IUnknown *)*ret_iface);
809 TRACE(
"(%p) ref = %lu\n", iface,
ref);
819 TRACE(
"(%p) ref = %lu\n", iface,
ref);
823 IReferenceClock_Release(
This->clock);
831 IDirectMusicBuffer *
buffer)
847 IDirectMusicBuffer *
buffer)
855 IDirectMusicInstrument *
instrument, IDirectMusicDownloadedInstrument **downloaded,
858 FIXME(
"(%p, %p, %p, %p, %lu) stub!\n", iface,
instrument, downloaded, ranges, num_ranges);
864 IDirectMusicDownloadedInstrument *downloaded)
866 FIXME(
"(%p, %p) stub!\n", iface, downloaded);
882 IReferenceClock_AddRef(*
clock);
890 FIXME(
"(%p, %p) stub!\n", iface, stats);
897 FIXME(
"(%p) stub!\n", iface);
904 FIXME(
"(%p, %p) stub!\n", iface, caps);
913 FIXME(
"(%p, %lu, %p, %lu, %p, %lu, %p, %p) stub!\n", iface, io_control_code,
in, size_in,
out
922 FIXME(
"(%p, %lu) stub!\n", iface, cgroups);
930 FIXME(
"(%p, %p) stub!\n", iface, cgroups);
937 FIXME(
"(%p, %u) stub!\n", iface, active);
959 IDirectSound *dsound, IDirectSoundBuffer *dsbuffer)
961 FIXME(
"(%p, %p, %p) stub!\n", iface, dsound, dsbuffer);
1025 DWORD src_channel,
DWORD dest_group,
DWORD dest_channel, IDirectMusicPort *dest_port)
1027 FIXME(
"(%p, %lu, %lu, %lu, %lu, %p) stub!\n", iface, src_group, src_channel, dest_group,
1028 dest_channel, dest_port);
1059 *
port = &
obj->IDirectMusicPort_iface;
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
HRESULT DMUSIC_CreateReferenceClockImpl(LPCGUID riid, LPVOID *ret_iface, LPUNKNOWN unkouter)
static ULONG WINAPI synth_port_Release(IDirectMusicPort *iface)
static HRESULT WINAPI midi_IDirectMusicThru_QueryInterface(IDirectMusicThru *iface, REFIID riid, void **ret_iface)
static HRESULT WINAPI IKsControlImpl_KsMethod(IKsControl *iface, KSMETHOD *method, ULONG method_len, void *data, ULONG data_len, ULONG *ret_len)
static HRESULT WINAPI midi_IDirectMusicPort_DeviceIoControl(IDirectMusicPort *iface, DWORD io_control_code, void *in, DWORD size_in, void *out, DWORD size_out, DWORD *ret_len, OVERLAPPED *overlapped)
static const IDirectMusicPortDownloadVtbl synth_port_download_vtbl
static HRESULT WINAPI midi_IDirectMusicPort_SetChannelPriority(IDirectMusicPort *iface, DWORD channel_group, DWORD channel, DWORD priority)
static HRESULT WINAPI midi_IDirectMusicPort_GetRunningStats(IDirectMusicPort *iface, DMUS_SYNTHSTATS *stats)
static HRESULT WINAPI synth_port_download_GetDLId(IDirectMusicPortDownload *iface, DWORD *first, DWORD count)
static ULONG WINAPI midi_IDirectMusicThru_Release(IDirectMusicThru *iface)
static HRESULT WINAPI synth_port_GetCaps(IDirectMusicPort *iface, DMUS_PORTCAPS *port_caps)
static struct synth_port * synth_from_IKsControl(IKsControl *iface)
static ULONG WINAPI synth_port_thru_AddRef(IDirectMusicThru *iface)
static HRESULT WINAPI synth_port_SetReadNotificationHandle(IDirectMusicPort *iface, HANDLE event)
static HRESULT WINAPI synth_port_SetDirectSound(IDirectMusicPort *iface, IDirectSound *dsound, IDirectSoundBuffer *dsbuffer)
static HRESULT WINAPI synth_port_download_QueryInterface(IDirectMusicPortDownload *iface, REFIID riid, void **ret_iface)
static ULONG WINAPI IKsControlImpl_Release(IKsControl *iface)
static const IDirectMusicThruVtbl synth_port_thru_vtbl
static HRESULT WINAPI synth_port_download_Download(IDirectMusicPortDownload *iface, IDirectMusicDownload *download)
static struct synth_port * synth_from_IDirectMusicPort(IDirectMusicPort *iface)
static HRESULT WINAPI midi_IDirectMusicPort_Compact(IDirectMusicPort *iface)
HRESULT synth_port_create(IDirectMusic8Impl *parent, DMUS_PORTPARAMS *port_params, DMUS_PORTCAPS *port_caps, IDirectMusicPort **port)
static ULONG WINAPI synth_port_download_Release(IDirectMusicPortDownload *iface)
static HRESULT WINAPI midi_IDirectMusicPort_GetCaps(IDirectMusicPort *iface, DMUS_PORTCAPS *caps)
static struct synth_port * synth_from_IDirectMusicThru(IDirectMusicThru *iface)
static HRESULT WINAPI synth_port_GetFormat(IDirectMusicPort *iface, WAVEFORMATEX *format, DWORD *fmtsize, DWORD *bufsize)
static HRESULT WINAPI synth_port_download_AllocateBuffer(IDirectMusicPortDownload *iface, DWORD size, IDirectMusicDownload **download)
static HRESULT WINAPI synth_port_PlayBuffer(IDirectMusicPort *iface, IDirectMusicBuffer *buffer)
static HRESULT WINAPI synth_port_GetChannelPriority(IDirectMusicPort *iface, DWORD channel_group, DWORD channel, DWORD *priority)
static HRESULT WINAPI synth_port_Compact(IDirectMusicPort *iface)
static HRESULT WINAPI midi_IDirectMusicPort_GetLatencyClock(IDirectMusicPort *iface, IReferenceClock **clock)
static HRESULT WINAPI synth_port_download_Unload(IDirectMusicPortDownload *iface, IDirectMusicDownload *download)
static HRESULT WINAPI synth_port_thru_QueryInterface(IDirectMusicThru *iface, REFIID riid, void **ret_iface)
static HRESULT WINAPI synth_port_Read(IDirectMusicPort *iface, IDirectMusicBuffer *buffer)
static ULONG WINAPI midi_IDirectMusicThru_AddRef(IDirectMusicThru *iface)
static HRESULT WINAPI midi_IDirectMusicPort_GetFormat(IDirectMusicPort *iface, WAVEFORMATEX *format, DWORD *format_size, DWORD *buffer_size)
static HRESULT WINAPI midi_IDirectMusicThru_ThruChannel(IDirectMusicThru *iface, DWORD src_group, DWORD src_channel, DWORD dest_group, DWORD dest_channel, IDirectMusicPort *dest_port)
static struct synth_port * synth_from_IDirectMusicPortDownload(IDirectMusicPortDownload *iface)
static struct midi_port * impl_from_IDirectMusicThru(IDirectMusicThru *iface)
static HRESULT WINAPI synth_port_thru_ThruChannel(IDirectMusicThru *iface, DWORD source_channel_group, DWORD source_channel, DWORD destination_channel_group, DWORD destination_channel, IDirectMusicPort *destination_port)
static HRESULT WINAPI synth_port_GetRunningStats(IDirectMusicPort *iface, DMUS_SYNTHSTATS *stats)
static HRESULT WINAPI midi_IDirectMusicPort_GetChannelPriority(IDirectMusicPort *iface, DWORD channel_group, DWORD channel, DWORD *priority)
static ULONG WINAPI synth_port_AddRef(IDirectMusicPort *iface)
static HRESULT WINAPI synth_port_SetNumChannelGroups(IDirectMusicPort *iface, DWORD channel_groups)
static ULONG WINAPI midi_IDirectMusicPort_AddRef(IDirectMusicPort *iface)
static ULONG WINAPI synth_port_download_AddRef(IDirectMusicPortDownload *iface)
static HRESULT WINAPI synth_port_QueryInterface(IDirectMusicPort *iface, REFIID riid, void **ret_iface)
static HRESULT WINAPI midi_IDirectMusicPort_Activate(IDirectMusicPort *iface, BOOL active)
static HRESULT WINAPI synth_port_GetNumChannelGroups(IDirectMusicPort *iface, DWORD *channel_groups)
static HRESULT WINAPI synth_port_SetChannelPriority(IDirectMusicPort *iface, DWORD channel_group, DWORD channel, DWORD priority)
HRESULT midi_out_port_create(IDirectMusic8Impl *parent, DMUS_PORTPARAMS *params, DMUS_PORTCAPS *caps, IDirectMusicPort **port)
static const IDirectMusicPortVtbl synth_port_vtbl
static HRESULT WINAPI synth_port_DeviceIoControl(IDirectMusicPort *iface, DWORD io_control_code, void *in_buffer, DWORD in_buffer_size, void *out_buffer, DWORD out_buffer_size, DWORD *bytes_returned, OVERLAPPED *overlapped)
static ULONG WINAPI IKsControlImpl_AddRef(IKsControl *iface)
static HRESULT WINAPI midi_IDirectMusicPort_SetReadNotificationHandle(IDirectMusicPort *iface, HANDLE event)
static ULONG WINAPI synth_port_thru_Release(IDirectMusicThru *iface)
static HRESULT WINAPI midi_IDirectMusicPort_Read(IDirectMusicPort *iface, IDirectMusicBuffer *buffer)
static HRESULT WINAPI midi_IDirectMusicPort_SetDirectSound(IDirectMusicPort *iface, IDirectSound *dsound, IDirectSoundBuffer *dsbuffer)
static HRESULT WINAPI synth_port_Activate(IDirectMusicPort *iface, BOOL active)
static HRESULT WINAPI IKsControlImpl_KsProperty(IKsControl *iface, KSPROPERTY *prop, ULONG prop_len, void *data, ULONG data_len, ULONG *ret_len)
static HRESULT WINAPI midi_IDirectMusicPort_QueryInterface(IDirectMusicPort *iface, REFIID riid, void **ret_iface)
static HRESULT WINAPI synth_port_GetLatencyClock(IDirectMusicPort *iface, IReferenceClock **clock)
static HRESULT WINAPI IKsControlImpl_KsEvent(IKsControl *iface, KSEVENT *event, ULONG event_len, void *data, ULONG data_len, ULONG *ret_len)
static HRESULT WINAPI midi_IDirectMusicPort_SetNumChannelGroups(IDirectMusicPort *iface, DWORD cgroups)
static const IKsControlVtbl ikscontrol_vtbl
static HRESULT WINAPI midi_IDirectMusicPort_DownloadInstrument(IDirectMusicPort *iface, IDirectMusicInstrument *instrument, IDirectMusicDownloadedInstrument **downloaded, DMUS_NOTERANGE *ranges, DWORD num_ranges)
HRESULT midi_in_port_create(IDirectMusic8Impl *parent, DMUS_PORTPARAMS *params, DMUS_PORTCAPS *caps, IDirectMusicPort **port)
static HRESULT WINAPI midi_IDirectMusicPort_GetNumChannelGroups(IDirectMusicPort *iface, DWORD *cgroups)
static const IDirectMusicPortVtbl midi_port_vtbl
static const IDirectMusicThruVtbl midi_thru_vtbl
static HRESULT WINAPI synth_port_UnloadInstrument(IDirectMusicPort *iface, IDirectMusicDownloadedInstrument *downloaded_instrument)
static HRESULT midi_port_create(IDirectMusic8Impl *parent, DMUS_PORTPARAMS *params, DMUS_PORTCAPS *caps, IDirectMusicPort **port)
static HRESULT WINAPI midi_IDirectMusicPort_UnloadInstrument(IDirectMusicPort *iface, IDirectMusicDownloadedInstrument *downloaded)
static HRESULT WINAPI IKsControlImpl_QueryInterface(IKsControl *iface, REFIID riid, void **ret_iface)
static struct midi_port * impl_from_IDirectMusicPort(IDirectMusicPort *iface)
static ULONG WINAPI midi_IDirectMusicPort_Release(IDirectMusicPort *iface)
static HRESULT WINAPI midi_IDirectMusicPort_PlayBuffer(IDirectMusicPort *iface, IDirectMusicBuffer *buffer)
static HRESULT WINAPI synth_port_DownloadInstrument(IDirectMusicPort *iface, IDirectMusicInstrument *instrument, IDirectMusicDownloadedInstrument **downloaded_instrument, DMUS_NOTERANGE *note_ranges, DWORD num_note_ranges)
static HRESULT WINAPI synth_port_download_GetAppend(IDirectMusicPortDownload *iface, DWORD *append)
static HRESULT WINAPI synth_port_download_GetBuffer(IDirectMusicPortDownload *iface, DWORD id, IDirectMusicDownload **download)
void format_size(uint64_t size, wstring &s, bool show_bytes)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
_ACRTIMP clock_t __cdecl clock(void)
#define DMUS_E_INVALID_DOWNLOADID
#define DMUS_E_ALREADY_DOWNLOADED
#define DMUS_E_DSOUND_ALREADY_SET
#define DMUS_E_NOT_DOWNLOADED_TO_PORT
const char * debugstr_dmguid(const GUID *id)
void dmusic_remove_port(IDirectMusic8Impl *dmusic, IDirectMusicPort *port)
HRESULT instrument_unload_from_port(IDirectMusicDownloadedInstrument *iface, IDirectMusicPortDownload *port)
HRESULT instrument_download_to_port(IDirectMusicInstrument *iface, IDirectMusicPortDownload *port, IDirectMusicDownloadedInstrument **downloaded)
HRESULT download_create(DWORD size, IDirectMusicDownload **ret_iface)
#define IDirectMusicDownload_Release(p)
#define DMUS_PORTPARAMS_CHANNELGROUPS
#define IDirectMusicPort_SetDirectSound(p, a, b)
#define IDirectMusicPort_Release(p)
#define IDirectMusicBuffer_GetStartTime(p, a)
#define IDirectMusicDownload_AddRef(p)
#define IDirectMusicPort_AddRef(p)
#define IDirectMusicDownload_GetBuffer(p, a, b)
#define IDirectMusicBuffer_GetUsedBytes(p, a)
#define IDirectMusicBuffer_GetRawBufferPtr(p, a)
#define IDirectMusicPort_QueryInterface(p, a, b)
#define IDirectMusicSynth_Unload(p, a, b, c)
#define IDirectMusicSynth_Release(p)
#define IDirectMusicSynthSink_GetDesiredBufferSize(p, a)
#define IDirectMusicSynth_Close(p)
#define IDirectMusicSynth_PlayBuffer(p, a, b, c)
#define IDirectMusicSynth_SetSynthSink(p, a)
#define IDirectMusicSynth_GetPortCaps(p, a)
#define IDirectMusicSynthSink_Release(p)
#define IDirectMusicSynth_GetFormat(p, a, b)
#define IDirectMusicSynthSink_SetDirectSound(p, a, b)
#define IDirectMusicSynth_Activate(p, a)
#define IDirectMusicSynth_Open(p, a)
#define IDirectMusicSynth_Download(p, a, b, c)
#define IDirectMusicSynth_SetMasterClock(p, a)
#define IDirectMusicSynthSink_SetMasterClock(p, a)
#define IDirectMusicSynth8_GetLatencyClock(p, a)
#define DAUD_CHAN16_DEF_VOICE_PRIORITY
#define DAUD_CHAN4_DEF_VOICE_PRIORITY
#define DAUD_CHAN13_DEF_VOICE_PRIORITY
#define DAUD_CHAN9_DEF_VOICE_PRIORITY
#define DAUD_CHAN14_DEF_VOICE_PRIORITY
#define DAUD_CHAN5_DEF_VOICE_PRIORITY
#define DAUD_CHAN7_DEF_VOICE_PRIORITY
#define DAUD_CHAN6_DEF_VOICE_PRIORITY
#define DAUD_CHAN10_DEF_VOICE_PRIORITY
#define DAUD_CHAN8_DEF_VOICE_PRIORITY
#define DAUD_CHAN3_DEF_VOICE_PRIORITY
#define DAUD_CHAN1_DEF_VOICE_PRIORITY
#define DAUD_CHAN2_DEF_VOICE_PRIORITY
#define DAUD_CHAN15_DEF_VOICE_PRIORITY
#define DAUD_CHAN11_DEF_VOICE_PRIORITY
#define DAUD_CHAN12_DEF_VOICE_PRIORITY
const GUID IID_IKsControl
#define IDirectSoundBuffer_AddRef(p)
#define IDirectSound_AddRef(p)
#define IDirectSound_Release(p)
#define IDirectSoundBuffer_Release(p)
#define KSPROPERTY_TYPE_GET
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum const GLfloat * params
GLenum GLuint GLsizei bufsize
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static unsigned char * in_buffer
static void append(struct dump_context *dc, const void *data, unsigned size)
static JOBOBJECTINFOCLASS LPVOID DWORD LPDWORD ret_len
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK ULONG PVOID ULONG PVOID out_buffer
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
static unsigned __int64 next
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED * overlapped
wchar_t const *const size_t const buffer_size
IDirectMusicDownload * download
IDirectMusicThru IDirectMusicThru_iface
IDirectMusicPort IDirectMusicPort_iface
IDirectSoundBuffer * dsbuffer
IDirectMusicPort IDirectMusicPort_iface
IDirectMusic8Impl * parent
IDirectMusicSynth * synth
IDirectMusicSynthSink * synth_sink
IDirectMusicPortDownload IDirectMusicPortDownload_iface
IKsControl IKsControl_iface
IDirectMusicThru IDirectMusicThru_iface
#define CONTAINING_RECORD(address, type, field)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
#define E_NOT_SUFFICIENT_BUFFER