人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

●質問者: futurista
●カテゴリ:コンピュータ インターネット
✍キーワード:API Windows ひとつ パソコン プログラミング
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● mystashes
●100ポイント

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

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

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

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

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

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

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

◎質問者からの返答

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

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

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

(他は、0もしくはNULL)

dwSize

szPhoneNumber

szUserName

szPassword

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

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

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


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

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

なんですか?

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

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

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

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

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


2 ● mystashes
●100ポイント

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

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

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

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

ですので

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

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

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

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

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

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

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

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

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

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

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

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

◎質問者からの返答

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

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

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

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

電話帳エントリーの作成

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

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

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

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

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

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

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

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

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

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

dwSize

szPhoneNumber

szUserName

szPassword

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



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

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


3 ● mystashes
●100ポイント ベストアンサー

電話帳エントリーの作成

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

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

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

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

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

ボーレートも接続のプロパティから変更できますので、そちらの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拠点への接続においても電話帳エントリを使用されてみてはいかがでしょうか。

◎質問者からの返答

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

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

感謝しております。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ