D - DMD 0.69 Bug - CreateFileA
- J C Calvarese (35/35) Aug 16 2003 The compiler is telling me that the arguments types don't match, but as
- Mike Wynn (7/42) Aug 16 2003 ^^ NOTE THIS LINE
- Walter (6/41) Aug 16 2003 Change:
- J C Calvarese (2/10) Aug 16 2003
- Walter (4/14) Aug 16 2003 You shouldn't feel stupid. The error message spit out by the compiler wa...
- Philippe Mori (11/65) Aug 16 2003 IMO we should be able to pass null keyword for a null pointer without an...
The compiler is telling me that the arguments types don't match, but as far as I can tell they do match -- exactly. I've had similar problems in the past with earlier releases of DMD. I think I solved them by overriding the prototype in windows.d (perhaps with "HANDLE CreateFileA(LPCSTR, DWORD, DWORD, UINT, DWORD, DWORD, HANDLE);"), but I can't see why that would be necessary. I cast my code until the types I send are precisely what the prototype desires, and the compiler is still unsatisfied. I'm trying to compile on WindowsME with DMD 0.69. function CreateFileA ( char*lpFileName, uint dwDesiredAccess, uint dwShareMode, SECURITY_ATTRIBUTES *lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, HANDLE hTemplateFile) does not match argument types (char*,uint,uint,SECURITY_ATTRIBUTES ,uint,uint,HANDLE ) Thanks for any help you can provide. Justin Here's the offending code... import string; import stream; import windows; int main(char[][] Args) { int i, j; char[] fn = Args[1]; bit ret; char* lpFileName = cast(char*) (fn ~ \0); HANDLE hFile = CreateFileA(lpFileName, GENERIC_WRITE, cast(uint) (FILE_SHARE_READ || FILE_SHARE_WRITE), cast(SECURITY_ATTRIBUTES) 0, cast(uint) OPEN_EXISTING, cast(uint) 0, cast(HANDLE) 0); return 0; }
Aug 16 2003
"J C Calvarese" <jcc7 cox.net> wrote in message news:bhlqv0$2rg0$1 digitaldaemon.com...The compiler is telling me that the arguments types don't match, but as far as I can tell they do match -- exactly. I've had similar problems in the past with earlier releases of DMD. I think I solved them by overriding the prototype in windows.d (perhaps with "HANDLE CreateFileA(LPCSTR, DWORD, DWORD, UINT, DWORD, DWORD, HANDLE);"), but I can't see why that would be necessary. I cast my code until the types I send are precisely what the prototype desires, and the compiler is still unsatisfied. I'm trying to compile on WindowsME with DMD 0.69. function CreateFileA ( char*lpFileName, uint dwDesiredAccess, uint dwShareMode, SECURITY_ATTRIBUTES *lpSecurityAttributes,^^ NOTE THIS LINEuint dwCreationDisposition, uint dwFlagsAndAttributes, HANDLE hTemplateFile) does not match argument types (char*,uint,uint,SECURITY_ATTRIBUTES ,uint,uint,HANDLE )^^ see anything yet ?Thanks for any help you can provide. Justin Here's the offending code... import string; import stream; import windows; int main(char[][] Args) { int i, j; char[] fn = Args[1]; bit ret; char* lpFileName = cast(char*) (fn ~ \0); HANDLE hFile = CreateFileA(lpFileName, GENERIC_WRITE, cast(uint) (FILE_SHARE_READ || FILE_SHARE_WRITE), cast(SECURITY_ATTRIBUTES) 0,should be `null`, cast(SECURITY_ATTRIBUTES*)null, or cast(SECURITY_ATTRIBUTES*)0 // you've missed the `*`cast(uint) OPEN_EXISTING, cast(uint) 0, cast(HANDLE) 0); return 0; }
Aug 16 2003
Change: cast(SECURITY_ATTRIBUTES) 0 to: cast (SECURITY_ATTRIBUTES*) 0 "J C Calvarese" <jcc7 cox.net> wrote in message news:bhlqv0$2rg0$1 digitaldaemon.com...The compiler is telling me that the arguments types don't match, but as far as I can tell they do match -- exactly. I've had similar problems in the past with earlier releases of DMD. I think I solved them by overriding the prototype in windows.d (perhaps with "HANDLE CreateFileA(LPCSTR, DWORD, DWORD, UINT, DWORD, DWORD, HANDLE);"), but I can't see why that would be necessary. I cast my code until the types I send are precisely what the prototype desires, and the compiler is still unsatisfied. I'm trying to compile on WindowsME with DMD 0.69. function CreateFileA ( char*lpFileName, uint dwDesiredAccess, uint dwShareMode, SECURITY_ATTRIBUTES *lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, HANDLE hTemplateFile) does not match argument types (char*,uint,uint,SECURITY_ATTRIBUTES ,uint,uint,HANDLE ) Thanks for any help you can provide. Justin Here's the offending code... import string; import stream; import windows; int main(char[][] Args) { int i, j; char[] fn = Args[1]; bit ret; char* lpFileName = cast(char*) (fn ~ \0); HANDLE hFile = CreateFileA(lpFileName, GENERIC_WRITE, cast(uint) (FILE_SHARE_READ || FILE_SHARE_WRITE), cast(SECURITY_ATTRIBUTES) 0, cast(uint) OPEN_EXISTING, cast(uint) 0, cast(HANDLE) 0); return 0; }
Aug 16 2003
Thanks a bunch. (Don't I feel stupid?) That fixed my problem. Walter wrote:Change: cast(SECURITY_ATTRIBUTES) 0 to: cast (SECURITY_ATTRIBUTES*) 0
Aug 16 2003
You shouldn't feel stupid. The error message spit out by the compiler was inadequate, and is what is to blame here. "J C Calvarese" <jcc7 cox.net> wrote in message news:bhm60h$7vh$1 digitaldaemon.com...Thanks a bunch. (Don't I feel stupid?) That fixed my problem. Walter wrote:Change: cast(SECURITY_ATTRIBUTES) 0 to: cast (SECURITY_ATTRIBUTES*) 0
Aug 16 2003
IMO we should be able to pass null keyword for a null pointer without any cast... In C++, it was an error that 0 and NULL are equivalent. Although we can support 0 to initialize a pointer, a nill constant that would be assignable only to pointer would be better and would help avoid ambiguities (0 would always match integral if possible) and if we like documenting null parameters, we could then declare a null constant of the proper type (nil_security_attributes). "Walter" <walter digitalmars.com> a écrit dans le message de news:bhlvvb$3102$1 digitaldaemon.com...Change: cast(SECURITY_ATTRIBUTES) 0 to: cast (SECURITY_ATTRIBUTES*) 0 "J C Calvarese" <jcc7 cox.net> wrote in message news:bhlqv0$2rg0$1 digitaldaemon.com...The compiler is telling me that the arguments types don't match, but as far as I can tell they do match -- exactly. I've had similar problems in the past with earlier releases of DMD. I think I solved them by overriding the prototype in windows.d (perhaps with "HANDLE CreateFileA(LPCSTR, DWORD, DWORD, UINT, DWORD, DWORD, HANDLE);"), but I can't see why that would be necessary. I cast my code until the types I send are precisely what the prototype desires, and the compiler is still unsatisfied. I'm trying to compile on WindowsME with DMD 0.69. function CreateFileA ( char*lpFileName, uint dwDesiredAccess, uint dwShareMode, SECURITY_ATTRIBUTES *lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, HANDLE hTemplateFile) does not match argument types (char*,uint,uint,SECURITY_ATTRIBUTES ,uint,uint,HANDLE ) Thanks for any help you can provide. Justin Here's the offending code... import string; import stream; import windows; int main(char[][] Args) { int i, j; char[] fn = Args[1]; bit ret; char* lpFileName = cast(char*) (fn ~ \0); HANDLE hFile = CreateFileA(lpFileName, GENERIC_WRITE, cast(uint) (FILE_SHARE_READ || FILE_SHARE_WRITE), cast(SECURITY_ATTRIBUTES) 0, cast(uint) OPEN_EXISTING, cast(uint) 0, cast(HANDLE) 0); return 0; }
Aug 16 2003