[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
Re: [MD:4936] Re: Visual C++ Toolkit 2003
- X-ml-count: 4941
- Subject: Re: [MD:4936] Re: Visual C++ Toolkit 2003
- From: Shun-ichi GOTO <gotoh@xxxxxxxxxxx>
- Date: Wed, 21 Apr 2004 14:10:31 +0900 (JST)
- X-mailer: Mew version 2.2 on Emacs 20.7 / Mule 4.1 (AOI)
>>>>> On Wed, 21 Apr 2004 13:02:58 +0900, あべ == ABE Yasushi wrote,
あべ> ふむふむ。
あべ> で、調べてみたらstdargvに改名されたようです。
あべ> PSDKにsetargv.cのソースがありましたが、stdargv.cをincludeしてるだけで
あべ> した。で、stdargv.objはlVCToolkitのlibc.libにあるようです。
詳細をいえば微妙に違うのですがそれはちょっとトリッキーでMSC固有な事情な
ので説明は割愛しますが、末尾に例を挙げておきます。
結局のところ、VC toolkit でワイルドカード展開展開をするには
1. psdk からstdargv.c を持って来て使う
2. void _setargv (void) { __setargv(); }
という内容のstdargv.c を作って使う
3. meadow のmain.c 辺りに void _setargv (void) { __setargv(); }
なんてな関数を追加し、setargv.obj とのリンクは止める。
あたりが選択可能でしょう。どれもやってることのミソは全く一緒で、記述する
場所を変えてるだけの違いです。Makefile の作り方やらMSVC固有要素の排除の
仕方から選ぶ選択肢として3種挙げて見ました。
あと__setargv() を呼べば良い、というのはMSVC固有の話なのでその考慮が必要
でしょう。BCC もほぼ同じだと思いますが調べてないです。
あべ> # *.lib ってcygwinのarで扱えるんですね〜
# へぇ〜、知らんかった
おまけ:
下の argvtest.c を2つの方法でコンパイルした結果を見るとわかると思いますが、
_setargv()という関数を、libc にあるものを使うか、別のものを与えるか、
でワイルドカード展開の可否を選択するメカニズムなのです。
方法1 : cl argvtest.c
方法2 : cl /DWILD argvtest.c
実行: argvtest c:\windows\*.dll
として両者の実行結果を見てみてください。
--- argvtest.c ---
#include <stdio.h>
int
main (int argc, char **argv)
{
int i;
printf ("argc=%d\n", argc);
for (i=0; i<argc; i++)
printf ("argv[%d] = '%s'\n", i, argv[i]);
return 0;
}
#ifdef WILD
void
_setargv (void)
{
printf("_setargv()\n");
__setargv();
}
#endif
--- end of argvtest.c ---
--- Regards,
Shun-ichi Goto <gotoh@xxxxxxxxxxx>
R&D Group, TAIYO Corp., Tokyo, JAPAN