デバッグ実行が例外処理で止まる

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
Homura

デバッグ実行が例外処理で止まる

#1 投稿記事 by Homura »

コード: 全て選択


#console
Type WSAData
wVersion As Integer
wHighVersion As Integer
szDescription(256) As Byte
szSystemStatus(128) As Byte
iMaxSockets As Integer
iMaxUdpDg As Integer
lpVendorInfo As Long
End Type
Type HOSTENT
h_name As BytePtr
h_aliases As DWordPtr
h_addrtype As Integer
h_length As Integer
h_addr_list As DWordPtr
End Type
Declare Function WSAStartup Lib "ws2_32.dll" (ByVal wVersionRequested As Long,ByRef lpWSAData As WSAData) As Long
Declare Function WSACleanup Lib "ws2_32.dll" () As Long
Declare Function gethostbyname Lib "ws2_32.dll" (ByVal name As BytePtr) As *HOSTENT
DIM tWsadata As WSAData
DIM tHostent As *HOSTENT
DIM tText[16] As Byte
WSAStartup(2,tWsadata)
tHostent=gethostbyname("www.activebasic.com")
wsprintf(tText,"%d.%d.%d.%d"_
	,GetByte(tHostent->h_addr_list[0]) _
	,GetByte(tHostent->h_addr_list[0]+1) _
	,GetByte(tHostent->h_addr_list[0]+2) _
	,GetByte(tHostent->h_addr_list[0]+3) )
MessageBox(NULL,tText,"IPアドレス",0)
WSACleanup()
END
上記のようなコードのリリースコンパイルと実行には成功するのですが、
デバッグ実行ではgethostbynameの位置で「例外処理 code 6BA」のダイアログが出て止まってしまいます。
gethostbynameだけではなくてlisten等のAPIでも同じなんですが、どこを直せばうまくデバッグ実行できるのでしょうか?
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

返信@yu0627

#2 投稿記事 by yu0627 »

僕の環境では例外処理が起こりませんでした。(AB4.24.00/WinXPSP2)
多分、Windowsのサービス「Server」「WorkStation」が起動されていないために起こるのだと思います。

起動の仕方
※必ず管理者権限のアカウントで
・スタート→コントロールパネル→パフォーマンスとメンテナンス→管理ツールのサービスを実行
・リストの中にある「Server」「Workstation」のサービスを起動。
Homura

解決しました

#3 投稿記事 by Homura »

お返事ありがとうございます。

ServerやWorkStationを起動しても変わりませんでしたが、
DNS Clientを起動したら前述のコードではうまく行きました。

何か釈然としないものがありますが・・・、ABの仕様なのかな?
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

返信@yu0627

#4 投稿記事 by yu0627 »

 これについては、前々から話題になっています。
しかし、正確な原因がまだ突き止められていません。
ひとつ候補としてあるのが、前述のサービスの関係です。
それにより例外処理が出る、というものです。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#5 投稿記事 by イグトランス »

DNS Clientサービスを実行しなければ動かないというのは納得のいく動作だと思います。
"www.activebasic.com"のようなドメイン名からIPアドレスを得ることこそがDNSの役割ですから,
そのサービスがなければ動かなくて当然と考えるべきではないでしょうか。
敢えて言うとすればABというよりもWinSockの仕様でしょう。

#6 投稿記事 by »

横から失礼します。
私の場合は、サービス「DNS Client」「WorkStation」
は自動で開始されていて「Server」はリストにありませんでした。
この状態でGetOpenFileNameを実行すると例外処理で落ちます。
どうすればいいのでしょうか?
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#7 投稿記事 by イグトランス »

GetOpenFileName関数が失敗する場合にはComputerBrowserサービスも関係あるようです。
これが起動されているかどうかも確かめてみてください。
http://www.activebasic.com/forum/viewtopic.php?p=2062
Homura

DNS Client

#8 投稿記事 by Homura »

> DNS Clientサービスを実行しなければ動かないというのは納得のいく動作だと思います。
> "www.activebasic.com"のようなドメイン名からIPアドレスを得ることこそがDNSの役割ですから,
> そのサービスがなければ動かなくて当然と考えるべきではないでしょうか。
> 敢えて言うとすればABというよりもWinSockの仕様でしょう。

前述の通り、そもそもリリースコンパイルではまったく問題はない訳で…。
我が家ではルーターで名前解決をしているので、DNS Clientを止めても大丈夫なんですけど、(というよりリソースの無駄)
デバッグのためだけに動かすというのはなんか違うなぁ、と。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

Re: DNS Client

#9 投稿記事 by イグトランス »

> 我が家ではルーターで名前解決をしているので,
そのようにどこかへ名前解決を依頼するのが(サービス名のそれではなく概念上の)DNSクライアントです。
逆にほかから名前解決を依頼されるほうがDNSサーバです。

今調べてみたのですが,WindowsのDNS ClientサービスはDNSで解決した名前のキャッシュを行うサービスで,
実際には名前解決を担っているわけではないようです。
返信する