What's the difference between [_b1] and _b1?
If it works with _b1, why do you want to use [_b1] instead of _b1, especially knowing that [_b1] doesn't work?
How exactly doesn't it work - do you get an error, a warning, a crash, ...what?
If you're only guessing how the whole code doesn't work, how did you decide it was the URLDownloadToFileA line that was broken?
The first question has two aims: (1) to get you to think about the difference because that might show why it doesn't work, and (2) because I don't know. At a guess the square brackets transform the value in the register in some way, but I'm not clear what; thought perhaps it dereferenced the pointer but if that's the case then "mov [_argc],0" doesn't make sense. The prototype at
shows the two parameters in question are defined as LPCTSTR so maybe that has something to do with it.