VB コンソールへの文字列復帰


カテゴリ
ググルヒト
恥晒し/一覧 (10)



2010年10月
         
28
           

新着エントリ
Outlook Express 6 でエラー 0x800c0133 (6/6)
EXCEL 自Bookを複製するマクロ (4/19)
EXCEL 勝手にセルの色が塗られる (3/13)
SQL Serverからのメッセージが消えない (12/3)
日本語変換が思い通りにいかない (4/23)
VB コンソールへの文字列復帰 (10/28)
タスクからのバッチファイル(*.BAT)実行結果が0x4 (10/5)
VB 標準モジュールが開かない (9/29)
EeePcの無線LANがつながらない (9/28)
EXCELエクセルVBAでエラー400 (9/23)

新着トラックバック/コメント


アーカイブ
2010年 (5)
9月 (3)
10月 (2)
2011年 (2)
4月 (1)
12月 (1)
2012年 (3)
3月 (1)
4月 (1)
6月 (1)


アクセスカウンタ
今日:26
昨日:33
累計:105,343


RSS/Powered by 「のブログ

[PR]



2010年10月28日(Thu)
< VB 標準モジュールが開かな... | VB Visual Basic/一覧 |  
VB コンソールへの文字列復帰

Q:コマンドプロンプト(コンソール)から
  VB6のEXEを実行して、その結果を
  コマンドプロンプト(コンソール)上に返したい。

A:VB6の標準機能では
  コマンドプロンプトへの出力はできません。

Q:でも、何とかしたいんだYo!!


=====================

...ということで自分で調べた結果。



何てことは無い。
ただ「簡単には出来ねーよ」というだけじゃないか!
Win32Apiを使えば出来そうじゃね!?

この辺り↓のAPIをググルと事例もいっぱい出てくるし。

・AllocConsole
・FreeConsole
・WriteConsole
・ReadConsole




で、作成したのが大雑把にまとめると、こんな感じのソース。

 → Call WriteConsole(Hnd,"★表示したい文字列★",文字長)

    (かなり大雑把だが...)




さっそくコンパイル。



ぉ、一発で通った。 俺、すごい。




実行してみる
┌───
│C:\>TEST.exe

│C:\>

└───


  ・・・


  何も起きない。


  ・・・


  何も出ない。







出ないじゃん!何で!












仕方ない、またググる。



どうやらリンカの「SUBSYSTEM」オプションを
「console」にしなければならないらしい。





・・・って?

リンカって何? SUBSYSTEMオプションって何?




どこを、どう変えればいいんだ?


VBエディタのプロパティを見たが、そんなの無いし

EXEを実行するときに、何か付ければイイのか?

┌───
│C:\>TEST.exe /SUBSYSTEM=console

│C:\>

└───

何も起きない...


ま、そうだろうな...













仕事の合間を見つつ、調べ続けること約6時間...



なんだろうなぁ


実行ファイル作成時のオプションをいじってみたり...


プロジェクトのプロパティをいじってみたり...


試行錯誤するも結局分からないまま。





途方に暮れて、訳もなくVBがインストールされている
フォルダなどを眺めてみる...


ぉ、VBフォルダの中に「LINK.EXE」というのを発見。



リンク? リンカ?


これ... 何だ?







ちょっと実験で、コマンドを発行  link /?



┌─────────────────────────────────
│C:\>link /?

│Microsoft (R) Incremental Linker Version 6.00.8168
│Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

│usage: LINK [options] [files] [@commandfile]

│ options:

│ /ALIGN:#
│ /BASE:{address|@filename,key}
│ /COMMENT:comment
│ /DEBUG
│ /DEBUGTYPE:{CV|COFF}
│ /DEF:filename
│ /DEFAULTLIB:library
│ /DELAY:{NOBIND|UNLOAD}
│ /DELAYLOAD:dll
│ /DLL
│ /DRIVER[:{UPONLY|WDM}]
│ /ENTRY:symbol
│ /EXETYPE:DYNAMIC
│ /EXPORT:symbol
│ /FIXED[:NO]
│ /FORCE[:{MULTIPLE|UNRESOLVED}]
│ /GPSIZE:#
│ /HEAP:reserve[,commit]
│ /IMPLIB:filename
│ /INCLUDE:symbol
│ /INCREMENTAL:{YES|NO}
│ /LARGEADDRESSAWARE[:NO]
│ /LIBPATH:dir
│ /LINK50COMPAT
│ /MACHINE:{ALPHA|ARM|IX86|MIPS|MIPS16|MIPSR41XX|PPC|SH3|SH4}
│ /MAP[:filename]
│ /MAPINFO:{EXPORTS|FIXUPS|LINES}
│ /MERGE:from=to
│ /NODEFAULTLIB[:library]
│ /NOENTRY
│ /NOLOGO
│ /OPT:{ICF[,iterations]|NOICF|NOREF|NOWIN98|REF|WIN98}
│ /ORDER:@filename
│ /OUT:filename
│ /PDB:{filename|NONE}
│ /PDBTYPE:{CON[SOLIDATE]|SEPT[YPES]}
│ /PROFILE
│ /RELEASE
│ /SECTION:name,[E][R][W][S][D][K][L][P][X]
│ /STACK:reserve[,commit]
│ /STUB:filename
│ /SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX}[,#[.##]]
│ /SWAPRUN:{CD|NET}
│ /VERBOSE[:LIB]
│ /VERSION:#[.#]
│ /VXD
│ /WARN[:warninglevel]
│ /WINDOWSCE:{CONVERT|EMULATION}
│ /WS:AGGRESSIVE

└─────────────────────────────────



ぉぉ、それっぽいのあるじゃん!

「/SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX}[,#[.##]]」

これ、これ!っぽい。



リンカってのは、コンパイラみたいなものなのか?

ようは、コンパイラみたいなのを作らなきゃならんのか?





もう一度ググる

キーワードは「VB LINK 使用方法 SUBSYSTEM:CONSOLE」




あった!! 発見!



リンカのオプション変更って
作成したEXEファイルに対して発行するコマンド?なのね、、、

 → Link /edit /subsystem:console C:\TEST.EXE




EXEを生成する時点で、何か変更しなければならないのかと思っていた。










クソっ! もうちょっと早く気付くことが出来れば...

ここまで到達するのに8時間くらい掛かった...


俺、センスない。







ま、それはイイ。



改めて実行してみる
┌───
│C:\>TEST.exe
│★表示したい文字列★

│C:\>

└───






ぬぉ。 やっと出たYo!!












近くに聞ける人がいたら、すぐ解決してたんだろうな。

くっ!



















ところで、今思うと・・・
LINK.EXEを発見した時点で、俺はなぜ「/?」を打ち込んだのだろう?

偶然とは言え、このアクションが無ければ
もっと時間が掛かったかもしれないな

そこだけが救いだった





つかれた