Supposedly this is the same as using wmain, but works with mingw
# define UNICODE
# define _UNICODE
#include <windows.h>
#include <stdio.h>
#include <shellapi.h>
int __cdecl main()
{
LPWSTR *szArglist;
int nArgs;
int i;
int ix;
int nLength;
wprintf(L"commandline==\n%ws\n====\n\n\n", GetCommandLineW() );
szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
if( NULL == szArglist )
{
wprintf(L"CommandLineToArgvW failed\n");
return 0;
}
else
{
for( i=0; i<nArgs; i++) printf("%d: %ws\n", i, szArglist[i]);
for( i=0; i<nArgs; i++) wprintf(L"\n\n%d: %s\n", i, szArglist[
+i]);
//~ http://stackoverflow.com/questions/4014172/wprintf-format-type-spe
+cification-ws# c++ - wprintf format type specification %ws - Stack Ov
+erflow
//~ http://msdn.microsoft.com/en-us/library/ms647550%28VS.85%29.aspx#
+ wsprintf function (Windows)
for( i=0; i<nArgs; i++) {
nLength = wcslen( szArglist[i] );
//~ printf("\n{%d: nLength %d}\n", i, nLength );
printf("\n$F[%d] = []; # nLength %d\n", i, nLength );
for( ix=0; ix < nLength; ix++ ){
//~ printf("%d: %d %#04X\n", i, ix, szArglist[i][ix] )
+;
//~ printf("{%d: %d %#04X} ", i, ix, szArglist[i][ix]
+);
printf("$F[%d][%d]=%#04X; ", i, ix, szArglist[i][ix] )
+;
if( 0 == (ix % 5) ) { printf("\n"); }
}
}
}
// Free memory allocated for CommandLineToArgvW arguments.
LocalFree(szArglist);
//~ sleep(20);
printf("\n");
system("PAUSE");
return(1);
}
And I do appear to get some kind of unicode :)
$F[1] = []; # nLength 39
$F[1][24]=0X6B; $F[1][25]=0X65;
$F[1][26]=0X62; $F[1][27]=0X61; $F[1][28]=0X62; $F[1][29]=0X5C; $F[1][
+30]=0X107;
$F[1][31]=0X65; $F[1][32]=0X76; $F[1][33]=0X61; $F[1][34]=0X70; $F[1][
+35]=0X2E;
$F[1][36]=0X74; $F[1][37]=0X78; $F[1][38]=0X74;
$F[2][24]=0X6B; $F[2][25]=0X65;
$F[2][26]=0X62; $F[2][27]=0X61; $F[2][28]=0X62; $F[2][29]=0X5C; $F[2][
+30]=0X72;
$F[2][31]=0X61; $F[2][32]=0X17E; $F[2][33]=0X6E; $F[2][34]=0X6A; $F[2]
+[35]=0X69;
$F[2][36]=0X107; $F[2][37]=0X2E; $F[2][38]=0X74; $F[2][39]=0X78; $F[2]
+[40]=0X74;
binmode STDOUT, ':encoding(UTF-8)';
fudge(\@F);
use Data::Dump; dd\@F;
sub fudge {
my( $args ) = @_;
for my $arg ( @$args ){
next unless defined $arg;
my $one = "";
for my $char ( @$arg ){
next unless defined $char;
my $chr = chr( $char );
print $chr;
$one .= $chr;
}
print "\n";
dd $one;
}
}
__END__
kebab\ćevap.txt
"kebab\\\x{107}evap.txt"
kebab\ražnjić.txt
"kebab\\ra\x{17E}nji\x{107}.txt"
Now all that is left is to figure out how to call system() in C
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.