Sorry to keep hammering away at this, I've got a bee in my bonnet
I've got CreateProcessW working in a simple test case. From the reading I've done - UnicodeString would appear to be best fit for this code (but I've tried WideString as well) .
Can anyone shed any light on why this isn't passing a correct encoded string through to mplayer?
procedure TForm1.Button2Click(Sender: TObject);
var
StartInfo: TStartUpInfo;
ProcInfo: TProcessInformation;
createOK: Boolean;
PName,PDir,PCommandLine : PWideChar;
sName, sDir, sCommandLine : UnicodeString; // Also tried WideString here, but I suspect UnicodeString is a better fit...
begin
FillChar(StartInfo, SizeOf(TStartUpInfo), #0);
FillChar(ProcInfo, SizeOf(TProcessInformation), #0);
StartInfo.cb := SizeOf(TStartUpInfo);
StartInfo.dwFlags := STARTF_USESHOWWINDOW;
StartInfo.wShowWindow := SW_SHOWMINIMIZED;
sName := 'B:\Code\Compile\mplayer-svn-37216\mplayer.exe';
sDir := 'B:\Code\Compile\mplayer-svn-37216';
sCommandLine := '-vo direct3d "B:\Code\Compile\Test Data\test2.mpg"'; // This line works
//sCommandLine := '-vo direct3d "B:\skiing-ǤǥǦ.avi"'; // This line doesn't - notice the encoding in the filename
PName := PWideChar(sName);
PCommandLine := PWideChar(sCommandLine);
PDir := PWideChar(sDir);
createOK := CreateProcessW(PName,PCommandLine,Nil, Nil, false,
CREATE_NEW_PROCESS_GROUP+HIGH_PRIORITY_CLASS,
NIL, PDir, STARTINFO, PROCINFO);
if createOK then
waitForSingleObject(PROCINFO.HPROCESS, Infinite)
else
ShowMessage('Create Failed');
end;
CreateOK is returning true here. When I throw in assorted SysToUTF8 or UTF8ToSys, then CreateOK returns false. Which makes some sort of sense to me.
This is my main reference page
http://wiki.freepascal.org/FPC_Unicode_supportbut I've also been bimbling through
http://docwiki.embarcadero.com/RADStudio/XE/en/Enabling_Applications_for_Unicode (kind of dangerous I know as fpc and delphi are in different places right now with this stuff)