C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: コマンドラインプログラム戻り値


(過去ログ 126 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■75277 / inTopicNo.1)  コマンドラインプログラム戻り値
  
□投稿者/ どめすと (1回)-(2015/03/10(Tue) 11:27:01)

分類:[VB.NET/VB2005 以降] 

コマンドラインプログラムで引数を渡して、
戻り値を取得したいのですが。
どうすれば良いでしょうか?
戻り値はテキスト1個です。

現在渡す方が出来てますが、戻り値を貰う方は、
Function main(... を使うのですか?
どうも、SUBとFunctionの使い方がわかりません。

バッチファイル
C:\WindowsApplication1.exe test1 test2


WindowsApplication1.exeのコード
Module Module1
    Sub main()
        Dim cmds() As String
        cmds = System.Environment.GetCommandLineArgs()
        MsgBox(cmds.Length)
        MsgBox(cmds(1))
        MsgBox(cmds(2))
    End Sub
End Module

表示結果
3
test1
test2


引用返信 編集キー/
■75278 / inTopicNo.2)  Re[1]: コマンドラインプログラム戻り値
□投稿者/ Hongliang (293回)-(2015/03/10(Tue) 11:32:53)
誰がどのように戻り値を受け取るのでしょうか?
なお、コマンドラインにおいて、戻り値は整数値を1つのみ使用可能です。
それ以外を使う必要があるなら、戻り値以外の方法を考える必要があります。
引用返信 編集キー/
■75279 / inTopicNo.3)  Re[2]: コマンドラインプログラム戻り値
□投稿者/ どめすと (2回)-(2015/03/10(Tue) 11:44:11)
No75278 (Hongliang さん) に返信
ご回答ありがとうございます。
どうも何も理解せずに作ろうとしているみたいで
申し訳ございません。
やりたいのは、EXCELのマクロまたは、VisualBasic2013から、
VisualBasic2013で作成したWindowsApplication1.exeに
テキストの引数を複数個渡して、WindowsApplication1.exeで処理
した結果(テキスト(サイズは不定))を受け取ろうとしています。
コマンドラインと表現したのは間違いの様です。
可能でしょうか?

引用返信 編集キー/
■75280 / inTopicNo.4)  Re[1]: コマンドラインプログラム戻り値
□投稿者/ 魔界の仮面弁士 (219回)-(2015/03/10(Tue) 12:33:53)
No75277 (どめすと さん) に返信
> バッチファイル
> C:\WindowsApplication1.exe test1 test2

バッチファイル側では、ERRORLEVEL で戻り値を取り出せます。
http://d.hatena.ne.jp/simply-k/20100812/1281653517


> WindowsApplication1.exeのコード

VB 側は、戻り値返却のため
> Sub main()
ではなく、
 Function Main() As Integer
もしくは
 Function Main(ByVal cmdArgs() As String) As Integer
にしてください。

※後者の引数(cmdArgs)は、System.Environment.GetCommandLineArgs() に相当します。
引用返信 編集キー/
■75281 / inTopicNo.5)  Re[3]: コマンドラインプログラム戻り値
□投稿者/ PANG2 (72回)-(2015/03/10(Tue) 12:56:19)
No75279 (どめすと さん) に返信
> やりたいのは、EXCELのマクロまたは、VisualBasic2013から、
> VisualBasic2013で作成したWindowsApplication1.exeに
> テキストの引数を複数個渡して、WindowsApplication1.exeで処理
> した結果(テキスト(サイズは不定))を受け取ろうとしています。

標準出力で渡すのが簡単です。

コンソールアプリケーション
http://www.atmarkit.co.jp/fdotnet/dotnettips/030cmdargs/cmdargs.html

EXCELのマクロ
http://officetanaka.net/excel/vba/tips/tips27.htm

VisualBasic アプリ
http://www.atmarkit.co.jp/fdotnet/dotnettips/657redirectstdout/redirectstdout.html
引用返信 編集キー/
■75282 / inTopicNo.6)  Re[3]: コマンドラインプログラム戻り値
□投稿者/ shu (717回)-(2015/03/10(Tue) 13:00:47)
No75279 (どめすと さん) に返信

> VisualBasic2013で作成したWindowsApplication1.exeに
> テキストの引数を複数個渡して、WindowsApplication1.exeで処理
> した結果(テキスト(サイズは不定))を受け取ろうとしています。
> コマンドラインと表現したのは間違いの様です。
> 可能でしょうか?

戻り値は整数値だけなので
標準出力へ書き出し、受け取る側でその内容を読み込むとか
外部ファイルを使用するなどの方がよいと思います。

引用返信 編集キー/
■75285 / inTopicNo.7)  Re[3]: コマンドラインプログラム戻り値
□投稿者/ 魔界の仮面弁士 (221回)-(2015/03/10(Tue) 13:34:07)
# Excel で「マクロ」とい割れると、自分は VBAコードではなく
# マクロシートの方を先に連想してしまう…。


No75279 (どめすと さん) に返信
> やりたいのは、EXCELのマクロまたは、VisualBasic2013から、
> VisualBasic2013で作成したWindowsApplication1.exeに
> テキストの引数を複数個渡して、WindowsApplication1.exeで処理
> した結果(テキスト(サイズは不定))を受け取ろうとしています。

(案1) 呼ばれた側(VB2013)は Clipboard.SetText して文字列セット。
  呼び出し側は、Range の PasteSpecial メソッド(VBA)や
  Clipboard.GetText (VB2013) で取り出す。

(案2) 呼ばれた側(VB2013)は、Console.Out.WriteLine() で文字列を書き込み。
  呼び出し側が VBA の場合は、WshShell オブジェクトの StdOut プロパティ経由で受け取り。
  呼び出し側が VB2013 の場合は、Process クラスの StandardOutput プロパティ経由で受け取り。

(案3) 呼ばれた側(VB2013)は、System.IO.File.WriteAllText でファイル化。
  呼び出し側は、そのテキストを読み取って処理。

(案4) 共有メモリをつかって交信。API を使っても良いし、下記のような物を使っても良し。
 http://7ujm.net/VB/AppConversation.html

(案5) 揮発性レジストリキーに書き込んで情報交換。

(案6) DDE 通信。Excel VBA や VB6 は標準実装されているけれど、VB2013 側にはないので
 NDde ライブラリあたりを使って受けわたす。

(案7) オートメーション。呼び出し元が Excel の場合限定。
 呼び出し側から ThisWorkbook.FullName を VB2013 にコマンドライン引数で渡し、
 呼ばれた側は「o = GetObject(それ)」で呼び出し元の Workbook インスタンスを取得。
 あとはそのまま、ワークシートを読み書きして情報交換。
 あるいは、Excel 側が Application.Hwnd をコマンドライン引数で送りつけて、
 VB2013 側は、IRunningObjectTable から Excel インスタンスを列挙して、
 その中で、.Application.Hwnd を探し当てるとか。

(案8) 参照設定案。呼び出す側も呼び出される側も VB2013 の場合限定。
 呼ばれる側でイベントを公開し、呼び出し側は、「その EXE を参照設定」して起動し、
 メッセージをそのイベントで受信する。VB6 でいうところの ActiveX EXE の要領。


他にもいろいろやり方はありますが、
> どうも何も理解せずに作ろうとしているみたいで
という状況が個人的には気がかりだったり。
引用返信 編集キー/
■75287 / inTopicNo.8)  Re[2]: コマンドラインプログラム戻り値
□投稿者/ PANG2 (73回)-(2015/03/10(Tue) 14:03:24)
2015/03/10(Tue) 14:05:04 編集(投稿者)

No75285 (魔界の仮面弁士 さん) に返信
> (案8) 参照設定案。呼び出す側も呼び出される側も VB2013 の場合限定。
>  呼ばれる側でイベントを公開し、呼び出し側は、「その EXE を参照設定」して起動し、
>  メッセージをそのイベントで受信する。VB6 でいうところの ActiveX EXE の要領。


Excelマクロ向けにCOMラッパー(.tlbファイル)を提供する。

http://www.atmarkit.co.jp/fdotnet/dotnettips/1063vbausedotnet/vbausedotnet.html
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -