This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: How to parse windows command line


Here is the code that is relevant to the problem:

int WINAPI WinMain
(
   HINSTANCE,
   HINSTANCE,
   LPSTR pszArguments,
   int
)
{
   std::string strTitle(pszArguments);
   ...


If I compile this with the Borland compiler and then lauch the program from bash using: ./Program.exe Filename, then pszArguments (and consequently strTitle) just equals "Filename".


If I compile with Cygwin and launch the file the same way, pszArguments equals something like: "Directory\\Directory\\Program.exe\" Filename "

pszArgument doesn't even contain the full path to the executable. It starts partway through the path name, containing only the ending portion of one of the directories in the path name.
I don't really care about the executable path name. All I want is the filename, like what I get when I compile with Borland or Microsoft.


Elfyn McBratney wrote:


I have written a Windows application that expects a file name as a
command line argument.  If I compile the program with a either the
Borland or Micrsoft compilers I get just the file name as the command
line argument when I run the program.

However if I compile the program with the Cygwin compiler I get some
like the following for the command line argument when I run the program:

"Directory\\Directory\\Program.exe\" Filename "





Need just a bit more information that that. What is the code you are using? WinMain?





This is make things akward.  I'm not sure why Cygwin is doing this when
other compilers don't.

Does Cygwin provide an API or other strategy to deal with this scenario?





Well, again that depends. My name is luke and I need to see the source. ;-) For example, this mingw (AKA Windows native) application

--- CUT HERE ---
#include <stdio.h>

void
main (int argc, char **argv)
{
   printf ("My name is %s,\nHello, %s\n",
           argv[0] /* The program (executable file) name */,
           argv[1] ? argv[1] : "No name" /* First argument (if) passed to
the program */);
}
--- CUT HERE ---

Will print out the name of the program. On Cygwin





My name is ./test1
Hello, Zippy





and on Windows (from a command prompt)






My name is G:\Cygwin\root\tmp\test1.exe
Hello, George and Bungle





Elfyn






Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]