command line arguments
Lee Thompson -- lee@usa.nai.net Monday, May 27, 1996 Hi, Enviro: VC 4.1 and Win95 It seems this must be a common problem, but without MSDN I am having a hard time finding an answer. When I double-click on a file with an extension associated with my program, I get a truncated pathname if there is a space in either the path or the file name. WinMain gets lpCmdLine correctly, but in ParseCommandLine, the cmdInfo structure is filled in with the path and filename truncated at the first space encountered. Hopefully someone can point me to a KB article or work-around for this. If so I will then thank them. Lee Thompson
Alberto Massari -- alby@belva.laboratorium.dist.unige.it Friday, May 31, 1996 [Mini-digest: 7 responses, though some missed the point about the fact that this was about using Explorer, not a DOS prompt.] At 11.59 27/05/96 -0400, you wrote: >Hi, > >Enviro: VC 4.1 and Win95 > >It seems this must be a common problem, but without MSDN I am having a >hard time finding an answer. When I double-click on a file with an >extension associated with my program, I get a truncated pathname if >there is a space in either the path or the file name. WinMain gets >lpCmdLine correctly, but in ParseCommandLine, the cmdInfo structure is >filled in with the path and filename truncated at the first space >encountered. Your command line should have been enclosed in '"'. The same problem appears with program like Microsoft Word and Visual C++ IDE, so I think it's a bug of Explorer.... Alberto ---------------------------- |\ _,,,--,,_ /,`.-'`' ._ \-;;,_ |,4- ) )_ .;.( `'-' '---''(_/._)-'(_\_) ------------------------------------------------------------------ Alby@MusArt.dist.unige.it is: Alberto Massari Laboratorio di Informatica Musicale D.I.S.T. Dipartimento di Informatica, Sistemistica e Telematica Universita' di Genova Via all'Opera Pia 13, I - 16145 Genova ITALIA http://MusArt.dist.unige.it/~alby/ ------------------------------------------------------------------ -----From: kitk@mudshark.sunquest.com (Kit Kauffmann) I prefer using the old-style arguments via: extern "C" { extern int __argc; extern char **__argv; } I'm still using 16-bit - I assume the 32-bit system still provides them? HTH! Kit My plants don't trust me any more. -----From: Dave KolbChange the registry entry for your filetype to put quotes around the % filespec argument. Dave Kolb Dave Kolb Compuserve: 72410,407@compuserve.com SAS Institute, Inc. EMAIL: sasdxk@unx.sas.com SAS Campus Drive - R3282 Phone: (919) 677-8000 x6827 Cary, NC 27513-2414 USA FAX: (919) 677-8123 -----From: beriksen@cda.com I haven't tested this, but, in '95 and NT I believe that you should pass command-line parameter strings in double quotes. (e.g., if I am at a dos prompt and I'm in c:\, and I have a directory called c:\My Directory then I have to type cd "My Directory" to get to My Directory. Leaving off the quotes produces an error.) Brian Eriksen CDA/Wiesenberger beriksen@cda.com -----From: Neal Stublen Have you entered the registry association correctly? I believe the "...\shell\open\command" key should follow the format: "appname.exe" "%1" Placing the double quotes around the %1 parameter mean that everything in the double quotes should be considered as the first parameter. Otherwise, the first parameter is delimited by a space, which is causing your truncation. -----From: "Greg Tighe" Actually, this is a fairly common problem with applications needing to support long file names - even Microsoft Word gets tripped up by this one. Solution: Go into Windows Explorer. Under the View menu, select Options. Click on the File Types tab and find the description of your document type. Select that file type and click the Edit button. Under the Actions list box, select 'open'. Click on the Edit button. You should see something like this under 'Application used to perform action': "C:\PROGRA~1\MYAPP\myapp.exe" %1 You need to put quotes around the argument passed to your program so that Windows will pass it in as a single argument and not as a series of space-delimited arguments: "C:\PROGRA~1\MYAPP\myapp.exe" "%1" Beware, though - you may need to parse out the leading and trailing double quote characters, much as CDocManager::OpenDocumentFile() does. I believe under Windows95 the quotes may be parsed out before the argument is passed to your app, but under WinNT they aren't. Hope this helps. -Greg Tighe Applied Intelligent Systems, Inc. Ann Arbor, MI gdt@aisinc.com -----From: "David W. Gillett" The command-line parse expects spaces to delimit tokens. To specify a token with an embedded space, put quotes around the entire token -- they'll be stripped off, but it will get parsed properly. > Hopefully someone can point me to a KB article or work-around for > this. If so I will then thank them. I don't know of a KB article, but the problem arises not only as a development issue but also as an end-user issue when configuring command lines, such as registry entries for file types. Dave
| Вернуться в корень Архива |