Thread overview
rdmd.exe doesn't compile on windows
Jan 29, 2013
ollie
Jan 29, 2013
Andrej Mitrovic
Jan 29, 2013
Rainer Schuetze
Jan 29, 2013
Dmitry Olshansky
January 29, 2013
rdmd.exe stopped compiling on Windows a couple of days ago with the following error:

rdmd.d(93): Error: function rdmd.ShellExecuteA (void*, const(char)*, const
(char)*, const(char)*, const(char)*, int) is not callable using argument
types (typeof(null),string,const(immutable(char)[]),typeof(null),typeof
(null),int)rdmd.d(93): Error: cannot implicitly convert expression (page)
of type const(immutable(char)[]) to const(char)*

Could someone who is more fluent in the bug process apply this fix (Or one the would be more correct).

Thanks,
Ollie


diff --git a/rdmd.d b/rdmd.d
index fb5a3ce..d9f5f79 100644
--- a/rdmd.d
+++ b/rdmd.d
@@ -14,6 +14,7 @@ version (Posix)
 else version (Windows)
 {
     import std.c.windows.windows;
+    import std.utf;
     extern(Windows) HINSTANCE ShellExecuteA(HWND, LPCSTR, LPCSTR, LPCSTR,
LPCSTR, INT);
     enum objExt = ".obj";
     enum binExt = ".exe";
@@ -90,7 +91,7 @@ int main(string[] args)
         version(Windows)
         {
             // invoke browser that is associated with the http protocol
-            ShellExecuteA(null, "open", page, null, null, SW_SHOWNORMAL);
+            ShellExecuteA(null, toUTFz!(LPCSTR)("open"), toUTFz!(LPCSTR)
(page), null, null, SW_SHOWNORMAL);
         }
         else
         {
January 29, 2013
On 1/29/13, ollie <ollie@home.net> wrote:
> rdmd.exe stopped compiling on Windows a couple of days ago.

Thanks for the report.

> +            ShellExecuteA(null, toUTFz!(LPCSTR)("open"), toUTFz!(LPCSTR)
> (page), null, null, SW_SHOWNORMAL);


For the "A" versions you can simply use toStringz, and D string literals are zero-appended by default so "open" doesn't have to be changed (note that means only for string literals, not string variables).

https://github.com/D-Programming-Language/tools/pull/42
January 29, 2013

On 29.01.2013 18:19, Andrej Mitrovic wrote:
> On 1/29/13, ollie <ollie@home.net> wrote:
>> rdmd.exe stopped compiling on Windows a couple of days ago.
>
> Thanks for the report.
>
>> +            ShellExecuteA(null, toUTFz!(LPCSTR)("open"), toUTFz!(LPCSTR)
>> (page), null, null, SW_SHOWNORMAL);
>
>
> For the "A" versions you can simply use toStringz, and D string
> literals are zero-appended by default so "open" doesn't have to be
> changed (note that means only for string literals, not string
> variables).
>
> https://github.com/D-Programming-Language/tools/pull/42
>

To be pedantic, both toUTFz and toStringz are wrong, the A functions expect toMBSz() to get at least some non-ASCII characters right.
January 29, 2013
29-Jan-2013 21:44, Rainer Schuetze пишет:
>
>
> On 29.01.2013 18:19, Andrej Mitrovic wrote:
>> On 1/29/13, ollie <ollie@home.net> wrote:
>>> rdmd.exe stopped compiling on Windows a couple of days ago.
>>
>> Thanks for the report.
>>
>>> +            ShellExecuteA(null, toUTFz!(LPCSTR)("open"),
>>> toUTFz!(LPCSTR)
>>> (page), null, null, SW_SHOWNORMAL);
>>
>>
>> For the "A" versions you can simply use toStringz, and D string
>> literals are zero-appended by default so "open" doesn't have to be
>> changed (note that means only for string literals, not string
>> variables).
>>
>> https://github.com/D-Programming-Language/tools/pull/42
>>
>
> To be pedantic, both toUTFz and toStringz are wrong, the A functions
> expect toMBSz() to get at least some non-ASCII characters right.

... that's why you always have to convert to UTF-16 use *W version that understands Unicode.

-- 
Dmitry Olshansky