VB Visual Basic

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



2018年1月
 
19 20
21 22 23 24 25 26 27
28 29 30 31      

新着エントリ
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 コンソールへの文字列復帰

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を発見した時点で、俺はなぜ「/?」を打ち込んだのだろう?

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

そこだけが救いだった





つかれた










2010年09月29日(Wed)▲ページの先頭へ
VB 標準モジュールが開かない

Q:VB6の標準モジュールを読み込めません。

A:読み込めません…じゃ分からない。
  他にも何かメッセージ、出てるだろ!

Q:読み込めないんだよぉ!!


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

...ということで自分で調べたのだが...


分からない。



通常、以下のようなモジュールをダブルクリックすると
VBのエディタがサクっと開くはずなんだけど...






やっぱり開かない。








ちなみに、モジュールの中身はこんな感じ↓
┌─┬───────────────────────────────────────────
│01│Attribute VB_Name = "ModuleCommon"
│02│Option Explicit
│03│'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
│04│' Common Module
│05│'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
│06│Public Function WaitTimer(WTime As Single)
│07│ Dim sv As Single
│08│ sv = Timer
│09│ Do Until Timer > sv + WTime
│10│ DoEvents
│11│ Loop
│12│End Sub
└─┴───────────────────────────────────────────







何が悪い?







1行づつ・1文字づつ検証したところ・・・
┌─┬───────────────────────────────────────────
│01│Attribute VB_Name = "ModuleCommon"
│02│Option Explicit
│03│'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
│04│' Common Module
│05│'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
│06│Public Function WaitTimer(WTime As Single)
│07│ Dim sv As Single
│08│ sv = Timer
│09│ Do Until Timer > sv + WTime
│10│ DoEvents
│11│ Loop
│12│End Sub
└─┴───────────────────────────────────────────



これだと開けた。







違いは、何?






3行目だ






コメント行の「〓」の数が40個か、36個か? それだけ。







いや、そんな理由な訳がない。






何かコーディング上の規約みたいなモノがあるはず。


もう少し調査してみよう!













・・・と思ったが・・・




ま、開けるようになったからイイや。





そのうち気が向いたら、ちゃんと調べる。