www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 19151] New: std.utf.toUTF16z() can not be used for LPWSTR

https://issues.dlang.org/show_bug.cgi?id=19151

          Issue ID: 19151
           Summary: std.utf.toUTF16z() can not be used for LPWSTR
           Product: D
           Version: D2
          Hardware: x86
                OS: Windows
            Status: NEW
          Severity: normal
          Priority: P1
         Component: phobos
          Assignee: nobody puremagic.com
          Reporter: StefanLiebig web.de

The documentation of toUTF16z()
(https://dlang.org/phobos/std_utf.html#toUTF16z) says that it can be used for
LPWSTR or LPCWSTR.

When compiling:
auto success = CreateProcessW( null,                               
                               commandLine.toUTF16z(),   // <- error
                               null,                  
                               null,                  
                               TRUE,                  
                               CREATE_UNICODE_ENVIRONMENT,
                               null,                      
                               null,                      
                               &startupInfo,              
                               &processInfo );            

I got the compile error:
source\process.d(32,32): Error: function
`core.sys.windows.winbase.CreateProcessW(const(wchar)*, wchar*,
SECURITY_ATTRIBUTES*, SECURITY_ATTRIBUTES*, int, uint, void*, const(wchar)*,
STARTUPINFOW*, PROCESS_INFORMATION*)` is not callable using argument types
`(typeof(null), const(wchar)*, typeof(null), typeof(null), int, uint,
typeof(null), typeof(null), STARTUPINFOW*, PROCESS_INFORMATION*)`
source\process.d(32,32):        cannot pass argument
`toUTF16z(cast(const(char)[])commandLine)` of type `const(wchar)*` to parameter
`wchar*`

Casting the second parameter to LPWSTR works.

Using DMD 2.081.1

Maybe it relates to https://issues.dlang.org/show_bug.cgi?id=2275

--
Aug 09 2018