www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - rdmd.exe doesn't compile on windows

reply ollie <ollie home.net> writes:
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
         {
Jan 29 2013
parent reply Andrej Mitrovic <andrej.mitrovich gmail.com> writes:
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
Jan 29 2013
parent reply Rainer Schuetze <r.sagitario gmx.de> writes:
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.
Jan 29 2013
parent Dmitry Olshansky <dmitry.olsh gmail.com> writes:
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
Jan 29 2013