I'm playing a bit with pseudotypes but there's something I'm not sure with..
Here's a short DirectShow-code that plays some audiofile:
Code: Select all
; 5.10 x86 Ascii -> working
; 5.10 x86 Unicode -> working
; 5.10 x64 Ascii -> working
; 5.10 x64 Unicode -> working
; 5.11 x86 Ascii -> working
; 5.11 x86 Unicode -> working
; 5.11 x64 Ascii -> crashes <---------
; 5.11 x64 Unicode -> working
Interface IGraphBuilder_u
QueryInterface(a, b)
AddRef()
Release()
AddFilter(a, b)
RemoveFilter(a)
EnumFilters(a)
FindFilterByName(a.p-unicode, b)
ConnectDirect(a, b, c)
Reconnect(a)
Disconnect(a)
SetDefaultSyncSource()
Connect(a, b)
Render(a)
;RenderFile(a, b)
RenderFile(a.p-unicode, b)
AddSourceFilter(a, b, c)
SetLogFile(a)
Abort()
ShouldOperationContinue()
EndInterface
Global IID_IGraphBuilder.GUID
With IID_IGraphBuilder
\Data1 = $56A868A9
\Data2 = $0AD4
\Data3 = $11CE
\Data4[0] = $B0
\Data4[1] = $3A
\Data4[2] = $00
\Data4[3] = $20
\Data4[4] = $AF
\Data4[5] = $0B
\Data4[6] = $A7
\Data4[7] = $70
EndWith
Global CLSID_FilterGraph.GUID
With CLSID_FilterGraph
\Data1 = $E436EBB3
\Data2 = $524F
\Data3 = $11CE
\Data4[0] = $9F
\Data4[1] = $53
\Data4[2] = $00
\Data4[3] = $20
\Data4[4] = $AF
\Data4[5] = $0B
\Data4[6] = $A7
\Data4[7] = $70
EndWith
Global IID_IMediaControl.GUID
With IID_IMediaControl
\Data1 = $56A868B1
\Data2 = $0AD4
\Data3 = $11CE
\Data4[0] = $B0
\Data4[1] = $3A
\Data4[2] = $00
\Data4[3] = $20
\Data4[4] = $AF
\Data4[5] = $0B
\Data4[6] = $A7
\Data4[7] = $70
EndWith
CoInitializeEx_(0, $02)
;Define GraphBuilder.IGraphBuilder
Define GraphBuilder.IGraphBuilder_u
Define MediaControl.IMediaControl
Filename.s = "PATH_TO_AUDIO_FILE"
If CoCreateInstance_(@CLSID_FilterGraph, #Null, $01, @IID_IGraphBuilder, @GraphBuilder) = #S_OK
Debug "GraphBuilder created"
If GraphBuilder\QueryInterface(@IID_IMediaControl, @MediaControl) = #S_OK
Debug "MediaControl created"
;If GraphBuilder\RenderFile(@Filename, #Null) = #S_OK
If GraphBuilder\RenderFile(Filename, #Null) = #S_OK
Debug "File rendered"
MediaControl\Run()
Debug "File playing"
Repeat
Delay(10)
Until GetAsyncKeyState_(#VK_ESCAPE)&$1
MediaControl\Stop()
CoUninitialize_()
EndIf
EndIf
EndIf
I've inserted my own copy of the Interface IGraphBuilder and replaced 'RenderFile(a, b)' with 'RenderFile(a.p-unicode, b)'.
This is working perfect with PB 5.10 x86 and x64, both Ascii- and Unicodemode.
But with PB 5.11 x64 Ascii the code crashes.
If I'm using the original Interface and poking the string to memory with unicode-flag, everything is working.
Is there an error in my usage with pseudotypes or is it a bug in PB 5.11?
I've tested this with PB 5.10 and 5.11, x86 and x64 on Windows 7.
Salc