WindowsのAPIであるRasDialについて、質問します。


http://www7a.biglobe.ne.jp/~tsuneoka/win32tech/8.html
http://eternalwindows.jp/network/ras/ras04.html
上記のページを見て、Ras接続が出来たのですが、よく考えてみると、
パソコン側のどのCOMポートを使用するかは指定していません。

COMポートの指定は、どのように行なわれているのでしょうか?(←これが質問)
プログラミングで一意に決定できるのでしょうか?
今はひとつの回線しか繋ぎませんが、複数の回線接続が必要になった時に
困るのではないかと思っています。

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:2009/12/16 23:15:52
  • 終了:2009/12/21 23:41:38

ベストアンサー

id:mystashes No.3

mystashes回答回数32ベストアンサー獲得回数112009/12/20 00:10:46

ポイント100pt

電話帳エントリーの作成

 →これって、新しい接続先とか作ると出来ますよね。

  テキストファイルですけど、エディタとか編集しても問題ないんでしょうか?

  書式がよくわからないのですが。ポートとかボーレートとか何とかわかりますので。

やめた方が良いと思います。

実際テキストエディタで編集できますが、不正な値も入力できてしまいます。

ボーレートも接続のプロパティから変更できますので、そちらのUI経由で変更された方が良いです。

>>RasDialコール時にはあくまでその時点でのRASDIALPARAMSを参照します。

>>ですので、ご自身でszPhoneNumberを設定された場合は、その情報に基づきダイアルされます。

>>「優先される」のではなくご自身で「上書き」されているためです。

逆に言うと、接続ごとにご指定の手順(RasGetEntryDialParamsでRASDIALPARAMSを設定してやる)が

できれば、問題ないということでしょうか?

問題ない「はず」です。

「はず」というのは現在手元にモデムで実検証できる環境がない為です。

過去にNT4.0で使っていたソースコードを見ながら回答させて頂いているので、100%の自信を持って「問題ない」と言えません。

力不足で申し訳ありません。(ポイントは0にして頂いて結構です)

また、前回の私の回答で”RasGetEntryDialParamsをコールするとszPhoneNumber等は電話帳エントリの情報に基づき設定されます。”という認識は誤りでした。

RasSetEntryDialParamsによるRASDIALPARAMSの初期化ではszPhoneNumberは設定されません。

http://support.microsoft.com/?scid=kb%3Ben-us%3B157765&x=16&y=13

This field does not contain the phone number associated with an entry in the phonebook when used with the RasGetEntryDialParams( ) or RasSetEntryDialParams( ) APIs.

また

the szPhoneNumber field is used to specify a phone number that can be dialed on the fly.

との表記も御座いますので、futuristaさんの「優先される」という御認識が正しかったです。

モデム無しの環境で、モデム付き機器から持ってきた電話帳エントリで試したみたところ、szUserName,szPasswordのみ埋まっており、szPhoneNumberは空だったことを確認しました。(電話帳エントリはユーザ名・パスワードを保存する設定になっているものです。szPasswordは実パスワードへのポインタですね)

今、うまくいっているのは、電話帳から引っ張ってくるべき情報を自前で設定しているからダイヤルが

できているということ?但し、複数へダイヤルする状況になった時は、

dwSize

szPhoneNumber

szUserName

szPassword

の情報だけでは、モデムを区別できないということですね。

御認識の通りです。

まずは、1拠点への接続においても電話帳エントリを使用されてみてはいかがでしょうか。

id:futurista

ご教授頂いた手法で2箇所同時に接続することに成功しました。

ご丁寧、かつ、詳細な解説、有難うございました。

感謝しております。

2009/12/21 23:40:49

その他の回答(2件)

id:mystashes No.1

mystashes回答回数32ベストアンサー獲得回数112009/12/17 21:41:23

ポイント100pt

ご質問趣旨の理解不足であれば申し訳ないですが...

RasDial関数を呼ぶ前にlpRasDialParams構造体のszEntryNameに電話帳エントリ名を与えますよね?

電話帳エントリ:モデム:COMポート = 1:1:1 の関係のはずなので、電話帳エントリ名の指定 = COMポートの指定にならないでしょうか?

複数の回線接続が必要になった際には電話帳エントリを追加されますよね。

また、RASクライアント側で複数同時接続が必要な環境に関して、差し支えなければ想定されている用途/環境を教えていただけないでしょうか。

URL必須でしたのでダミーです

http://q.hatena.ne.jp/1260972949

id:futurista

ご回答有難うございます。

質問の趣旨は、ご理解されています。

当方ででやった時は、以下4つのメンバへの設定だけで問題ありませんでした。

(他は、0もしくはNULL)

dwSize

szPhoneNumber

szUserName

szPassword

szEntryNameに、ダイヤルアップの接続先(電話帳のエントリー)を

与えた場合は、szEntryNameの設定でダイヤルするようですが、

電話番号などは、szPhoneNumberが優先されるようでした。


『電話帳エントリ:モデム:COMポート = 1:1:1』

『電話帳エントリ名の指定 = COMポート』

なんですか?

szEntryNameの指定がない今は、どういう風になっているんでしょうね?

OSが勝手に電話帳のエントリーを割り当てているのかな??

「RASクライアント側で複数同時接続が必要な環境に関して、~」に関しては、

詳しくは、申し上げられませんが、そのような環境を構築しなければなりませんので、

こういった質問をさせて頂いております。ちなみにクライアントはWinXPです。

2009/12/17 23:32:48
id:mystashes No.2

mystashes回答回数32ベストアンサー獲得回数112009/12/18 00:14:23

ポイント100pt

コメント有難う御座います。大分理解できました。

>COMポートの指定は、どのように行なわれているのでしょうか?(←これが質問)

現在のszEntryNameを設定せず、szPhoneNumberに番号を設定しRasDialをコールしている状況下においては「最初に発見されたモデム」になります。

ユーザからは指定できません。

ですので

>今はひとつの回線しか繋ぎませんが、複数の回線接続が必要になった時に

>困るのではないかと思っています。

というご懸念を払拭するためには接続先毎の電話帳エントリを作成されて、RasDialコール時にszEntryNameを設定したうえで、RasGetEntryDialParamsでRASDIALPARAMSを設定してやるのが最も簡単だと思います。

>与えた場合は、szEntryNameの設定でダイヤルするようですが、

>電話番号などは、szPhoneNumberが優先されるようでした。

szEntryNameが必要になるのは、あくまでRasGetEntryDialParamsをコールする際です。

szEntryName設定して、RasGetEntryDialParamsをコールするとszPhoneNumber等は電話帳エントリの情報に基づき設定されます。

RasDialコール時にはあくまでその時点でのRASDIALPARAMSを参照します。

ですので、ご自身でszPhoneNumberを設定された場合は、その情報に基づきダイアルされます。

「優先される」のではなくご自身で「上書き」されているためです。

※一人で複数回回答するのが忍びないので、コメント欄を開けて頂ければそちらにコメント致します。

http://q.hatena.ne.jp/1260972949

id:futurista

質問の意図を理解された丁寧なご回答有難うございます。

同じような質問になってしまいますが、確認させて下さい。

>>というご懸念を払拭するためには接続先毎の電話帳エントリを作成されて、RasDialコール時にszEntryNameを設定したうえで、

>>RasGetEntryDialParamsでRASDIALPARAMSを設定してやるのが最も簡単だと思います。

電話帳エントリーの作成

 →これって、新しい接続先とか作ると出来ますよね。

  テキストファイルですけど、エディタとか編集しても問題ないんでしょうか?

  書式がよくわからないのですが。ポートとかボーレートとか何とかわかりますので。

>>RasDialコール時にはあくまでその時点でのRASDIALPARAMSを参照します。

>>ですので、ご自身でszPhoneNumberを設定された場合は、その情報に基づきダイアルされます。

>>「優先される」のではなくご自身で「上書き」されているためです。

逆に言うと、接続ごとにご指定の手順(RasGetEntryDialParamsでRASDIALPARAMSを設定してやる)が

できれば、問題ないということでしょうか?

今、うまくいっているのは、電話帳から引っ張ってくるべき情報を自前で設定しているからダイヤルが

できているということ?但し、複数へダイヤルする状況になった時は、

dwSize

szPhoneNumber

szUserName

szPassword

の情報だけでは、モデムを区別できないということですね。



※有用な回答を頂けてますので、回答でも、コメントでもどちらでも結構です。

 回答の上限は変えておきます。今後ともよろしくお願いします。

2009/12/19 13:39:28
id:mystashes No.3

mystashes回答回数32ベストアンサー獲得回数112009/12/20 00:10:46ここでベストアンサー

ポイント100pt

電話帳エントリーの作成

 →これって、新しい接続先とか作ると出来ますよね。

  テキストファイルですけど、エディタとか編集しても問題ないんでしょうか?

  書式がよくわからないのですが。ポートとかボーレートとか何とかわかりますので。

やめた方が良いと思います。

実際テキストエディタで編集できますが、不正な値も入力できてしまいます。

ボーレートも接続のプロパティから変更できますので、そちらのUI経由で変更された方が良いです。

>>RasDialコール時にはあくまでその時点でのRASDIALPARAMSを参照します。

>>ですので、ご自身でszPhoneNumberを設定された場合は、その情報に基づきダイアルされます。

>>「優先される」のではなくご自身で「上書き」されているためです。

逆に言うと、接続ごとにご指定の手順(RasGetEntryDialParamsでRASDIALPARAMSを設定してやる)が

できれば、問題ないということでしょうか?

問題ない「はず」です。

「はず」というのは現在手元にモデムで実検証できる環境がない為です。

過去にNT4.0で使っていたソースコードを見ながら回答させて頂いているので、100%の自信を持って「問題ない」と言えません。

力不足で申し訳ありません。(ポイントは0にして頂いて結構です)

また、前回の私の回答で”RasGetEntryDialParamsをコールするとszPhoneNumber等は電話帳エントリの情報に基づき設定されます。”という認識は誤りでした。

RasSetEntryDialParamsによるRASDIALPARAMSの初期化ではszPhoneNumberは設定されません。

http://support.microsoft.com/?scid=kb%3Ben-us%3B157765&x=16&y=13

This field does not contain the phone number associated with an entry in the phonebook when used with the RasGetEntryDialParams( ) or RasSetEntryDialParams( ) APIs.

また

the szPhoneNumber field is used to specify a phone number that can be dialed on the fly.

との表記も御座いますので、futuristaさんの「優先される」という御認識が正しかったです。

モデム無しの環境で、モデム付き機器から持ってきた電話帳エントリで試したみたところ、szUserName,szPasswordのみ埋まっており、szPhoneNumberは空だったことを確認しました。(電話帳エントリはユーザ名・パスワードを保存する設定になっているものです。szPasswordは実パスワードへのポインタですね)

今、うまくいっているのは、電話帳から引っ張ってくるべき情報を自前で設定しているからダイヤルが

できているということ?但し、複数へダイヤルする状況になった時は、

dwSize

szPhoneNumber

szUserName

szPassword

の情報だけでは、モデムを区別できないということですね。

御認識の通りです。

まずは、1拠点への接続においても電話帳エントリを使用されてみてはいかがでしょうか。

id:futurista

ご教授頂いた手法で2箇所同時に接続することに成功しました。

ご丁寧、かつ、詳細な解説、有難うございました。

感謝しております。

2009/12/21 23:40:49
  • id:futurista
    >>mystashesさん

    ご丁寧、かつ、詳細な回答有難うございます。

    現在、手元に確認できる環境がないため、
    結果が出たら、改めて、ご報告させて頂きます。
  • id:mystashes
    解決の御連絡有難う御座います。
    無事御解決されたとのことで、何よりです。
    ポイントといるか賞も有難う御座います。
    ところで、ポイントを余分に付け間違えていらっしゃらないでしょうか。
    私の全回答に100ポイントずつ、計300ポイント頂いております。
    非常に多大なポイントを頂戴し喜んでいたのですが、全回答に100ポイント付いているのを見て、ふとお間違えではないのかと考えました。
    誤配分であればお返し致しますので、コメント欄等で御連絡ください。

  • id:futurista
    >>mystashesさん

    ポイントについては、誤配分ではありません。

    もし、ご教授頂けなければ、多大な労力を費やしていたと思いますので。。
    また、単に自身の知識や経験を披露するのではなく、質問者の
    意図を理解したうえでの適切な回答をして頂いた所に好感を持ちました。

    今後ともよろしくお願いします。
    (また、私自身も勉強が必要だと痛感しました。)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません