tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルコマンドラインの引数について
記事No5114
投稿日: 2007/03/14(Wed) 19:01
投稿者♪さくらんぼ♪
お世話になります。

複数の項目を引数としたいのですが、
コマンドラインの引数に配列(構造体)を使用することはできないでしょうか?

よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: コマンドラインの引数について
記事No5116
投稿日: 2007/03/14(Wed) 21:18
投稿者るしぇ
[コマンドラインとは]
http://e-words.jp/w/E382B3E3839EE383B3E38389E383A9E382A4E383B3.html

引数を幾つ取ろうが、その引数がプログラム側で配列(構造体)に格納されようが、
コマンドライン上では文字列である必要があると思いますが?

[ツリー表示へ]
タイトルRe^2: コマンドラインの引数について
記事No5119
投稿日: 2007/03/15(Thu) 11:16
投稿者♪さくらんぼ♪
るしぇさん、ありがとうございます。

読み直してみたら説明不足ということに気づきました。
申し訳ありません。

Shell関数でVb.netで作られた別のExeを起動しようとしています。
構造体の定義は別Exeにもあります。
次のような感じでコーディングをしたのですが、
『演算子 '&' は、型 'String' および 'LogonCtl' に対して定義されていません。』
というエラーになってしまいます。
=======================================================================================
    Structure LogonCtl
        Dim LOGON_CD As String                                  'ログオン者コード
        Dim LOGON_USER As String                                'ログオン者名
    End Structure

    Public Kyotu As LogonCtl                                    'ログオン情報共通領域
---------------------------------------------------------------------------------------
Shell(G.EXE_PATH & ExeName & ".exe " & Kyotu, AppWinStyle.NormalFocus)
=======================================================================================

別exeに複数の情報を渡したい場合、どうすればよいのでしょうか?

[ツリー表示へ]
タイトルRe^3: コマンドラインの引数について
記事No5121
投稿日: 2007/03/15(Thu) 11:33
投稿者よねKEN
> Shell関数でVb.netで作られた別のExeを起動しようとしています。

・呼び出し元も呼び出し先もVB.netのEXEですか?
  また、それぞれのVB.netのバージョンは?

・別のEXEは別プロセスとして起動したいのでしょうか?
・呼び出し元EXEと呼び出し先のEXE関係は?
・呼び出し側も呼び出し元もプログラムソースがあって、
♪さくらんぼ♪さんが修正できるのか?

とりあえず、るしぇさんの説明にあるように、
コマンドライン引数を介してでは、単純にはご希望の動作は実現できません。

#・呼び出し側のプログラムで渡したいデータを1行の文字列に変換する
#・呼び出し先のプログラムで受け取った文字列データから元の構造体へ変換する
#という方法で実現はできるかもしれませんが、もっと別の方法を検討した方がよいでしょう。

受け渡しの手段はいろいろありますが、条件次第で取れる方法も限定されたりする場合があります。
それぞれのEXEについての前提条件がわからないので、
まずはその辺りを提示していただいた方がよいと思います。

[ツリー表示へ]
タイトルRe^4: コマンドラインの引数について
記事No5128
投稿日: 2007/03/15(Thu) 15:44
投稿者♪さくらんぼ♪
よねKENさん、ありがとうございます。

> ・呼び出し元も呼び出し先もVB.netのEXEですか?
>   また、それぞれのVB.netのバージョンは?

両方ともVB.netのEXEで、バージョンはVS2005です。


> ・別のEXEは別プロセスとして起動したいのでしょうか?

できれば別プロセスで動かしたいです。


> ・呼び出し元EXEと呼び出し先のEXE関係は?

呼び出し元:必要な情報を入力する画面
呼び出し先:呼び出し元で入力された情報を元に処理を行う画面
      

> ・呼び出し側も呼び出し元もプログラムソースがあって、
>  ♪さくらんぼ♪さんが修正できるのか?

はい、修正できる状態にあります。

>#・呼び出し側のプログラムで渡したいデータを1行の文字列に変換する
>#・呼び出し先のプログラムで受け取った文字列データから元の構造体へ変換する

この方法も思いついたのですが、最終手段だなと思っています。


私には思いつくものがありません。
すみませんが、EXE間の情報をやり取りする方法をご教授ください。
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^5: コマンドラインの引数について
記事No5129
投稿日: 2007/03/15(Thu) 15:57
投稿者Blue
>最終手段だなと思っています。
というかこれが普通ですけど。

これをつかわないとなるとプロセス間通信になります。
ですので起動時に解釈するようなことはできません。

起動してから何らかの方法で情報を渡すということになります。
(WM_COPYDATAをSendMessageとか、DDEとか、マッピングファイルとか)
そんなことやるなら、やはり
>#・呼び出し側のプログラムで渡したいデータを1行の文字列に変換する
>#・呼び出し先のプログラムで受け取った文字列データから元の構造体へ変換する
ですね。

[ツリー表示へ]
タイトルRe^6: コマンドラインの引数について
記事No5131
投稿日: 2007/03/15(Thu) 18:08
投稿者♪さくらんぼ♪
Blueさん、ありがとうございます。

>#・呼び出し側のプログラムで渡したいデータを1行の文字列に変換する
>#・呼び出し先のプログラムで受け取った文字列データから元の構造体へ変換する

上記の方法で受け渡しをすることにしました。

またお世話になることがあると思いますが、その際はよろしくお願いいたします。

[ツリー表示へ]
タイトルRe^5: コマンドラインの引数について
記事No5130
投稿日: 2007/03/15(Thu) 16:12
投稿者よねKEN
> > ・別のEXEは別プロセスとして起動したいのでしょうか?
>
> できれば別プロセスで動かしたいです。

別プロセスでなくてよければ、より柔軟にできるのですが、ダメなら仕方ないですね。
#少ない工数で、簡単に、かつ、より柔軟にできるかどうかは現時点の設計次第ですが・・・

興味があれば、Activator.CreateInstanceメソッドあたりを調べてみてください。
呼び出し元から呼び出し先プログラムのクラスを生成できます。
あるいは、VB2005なので、単純に呼び出し元プログラムから
呼び出し先プログラムのexeを参照設定してもよいですね。
  
> >#・呼び出し側のプログラムで渡したいデータを1行の文字列に変換する
> >#・呼び出し先のプログラムで受け取った文字列データから元の構造体へ変換する
>
> この方法も思いついたのですが、最終手段だなと思っています。

両方のプログラムを修正できるとのことですから、
この方法をファイルを介して行ってはいかがでしょうか?
.NETではオブジェクトをそのままファイルに保存することが割と簡単にできます。
XmlSerializerクラスを調べてみてください。
Googleで検索すればサンプルも見つかります。

[ツリー表示へ]
タイトルRe^6: コマンドラインの引数について
記事No5132
投稿日: 2007/03/15(Thu) 18:12
投稿者♪さくらんぼ♪
よねKENさん、ありがとうございます。

>#・呼び出し側のプログラムで渡したいデータを1行の文字列に変換する
>#・呼び出し先のプログラムで受け取った文字列データから元の構造体へ変換する

上記の方法で受け渡しをすることにしました。
今は時間があまりないので、

> XmlSerializerクラスを調べてみてください。

はちょっと難しいですが、、、、


> 別プロセスでなくてよければ、より柔軟にできるのですが、ダメなら仕方ないですね。
> #少ない工数で、簡単に、かつ、より柔軟にできるかどうかは現時点の設計次第ですが・・・
>
> 興味があれば、Activator.CreateInstanceメソッドあたりを調べてみてください。

調べてみようと思います。
また同じようなことで悩まないために勉強しようと思います。

またお世話になる機会があると思いますが、その際はよろしくお願いいたします。

[ツリー表示へ]